{
  "contractName": "SqrtPriceMath",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Functions based on Q64.96 sqrt price and liquidity\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SqrtPriceMath.sol\":\"SqrtPriceMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint96.sol\":{\"keccak256\":\"0xb466ea5c68592e0aab06e0ffa0937b047a2ec0916c2a181dee91f439e06c36d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90e2d3770039b4430765a328d1abc6d035ad5a6e71906ab8f120220f3a9a9899\",\"dweb:/ipfs/QmTJFjBkBJGL98BjRnyH48yDZC94LU42SuuEPkd5qhgTnW\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0xe511530871deaef86692cea9adb6076d26d7b47fd4815ce51af52af981026057\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc5a6ae776be3e7dcbd23d49ffbc9d792fed0ddf4b111ebb64b9bb2133ec263e\",\"dweb:/ipfs/QmbAUtWqvipzEARQpFpkzYKBELy3qeW5WXnZxHFU84sxG7\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LowGasSafeMath.sol\":{\"keccak256\":\"0xf2583083971cf8a4274e14515aabbf9f4855193e34fe2addb0ca7b1589519b0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cbf0ada2bba8827d459101a2359e4682be749b9ddd0a3c44f26119c9a0898e82\",\"dweb:/ipfs/QmPmKotXLza9j7sjNaXSYY9XbyZhkkQ3nMeWE9tiHKeouC\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SafeCast.sol\":{\"keccak256\":\"0x4a12ab60fdb663b341bb3a2f5c6631ba40b7b6fa9d131c9540b60dbb4196a27e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d55e89b639f5ea027798cf3f246f38209308e812b8e568d19aa487bcdc8008a0\",\"dweb:/ipfs/QmfRWZGxKK21EgQea2PLxgJ6aypEbQjQSotHiruXGmKVm6\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SqrtPriceMath.sol\":{\"keccak256\":\"0x4f69701d331d364b69a1cda77cd7b983a0079d36ae0e06b0bb1d64ae56c3705e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f9ed4f172da650484c97d31cce084e905e69c3f3b072141cb15363f4ed0cd03c\",\"dweb:/ipfs/QmPNDM667PxzbbR8YDbtibFaPMGrcbK71GKpFPkGgDEYvb\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/UnsafeMath.sol\":{\"keccak256\":\"0x5f36d7d16348d8c37fe64fda932018d6e5e8acecd054f0f97d32db62d20c6c88\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://4bd4e817ea3d2c26bb2be7e58db3eaa403119562c18d4c09cc92fb31aa231496\",\"dweb:/ipfs/QmbpjgL8Hf1mhmUyf9hpuPk4noGAggCdTqaRBFKqNF3AQw\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ba3f22903afc522725e1c270123e165e9f3e7b873e3b44620ce01d6ea44ebb0564736f6c63430007060033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ba3f22903afc522725e1c270123e165e9f3e7b873e3b44620ce01d6ea44ebb0564736f6c63430007060033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "369:10404:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "369:10404:26:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity >=0.5.0;\n\nimport './LowGasSafeMath.sol';\nimport './SafeCast.sol';\n\nimport './FullMath.sol';\nimport './UnsafeMath.sol';\nimport './FixedPoint96.sol';\n\n/// @title Functions based on Q64.96 sqrt price and liquidity\n/// @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas\nlibrary SqrtPriceMath {\n    using LowGasSafeMath for uint256;\n    using SafeCast for uint256;\n\n    /// @notice Gets the next sqrt price given a delta of token0\n    /// @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least\n    /// far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the\n    /// price less in order to not send too much output.\n    /// The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96),\n    /// if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount).\n    /// @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta\n    /// @param liquidity The amount of usable liquidity\n    /// @param amount How much of token0 to add or remove from virtual reserves\n    /// @param add Whether to add or remove the amount of token0\n    /// @return The price after adding or removing amount, depending on add\n    function getNextSqrtPriceFromAmount0RoundingUp(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amount,\n        bool add\n    ) internal pure returns (uint160) {\n        // we short circuit amount == 0 because the result is otherwise not guaranteed to equal the input price\n        if (amount == 0) return sqrtPX96;\n        uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION;\n\n        if (add) {\n            uint256 product;\n            if ((product = amount * sqrtPX96) / amount == sqrtPX96) {\n                uint256 denominator = numerator1 + product;\n                if (denominator >= numerator1)\n                    // always fits in 160 bits\n                    return uint160(FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator));\n            }\n\n            return uint160(UnsafeMath.divRoundingUp(numerator1, (numerator1 / sqrtPX96).add(amount)));\n        } else {\n            uint256 product;\n            // if the product overflows, we know the denominator underflows\n            // in addition, we must check that the denominator does not underflow\n            require((product = amount * sqrtPX96) / amount == sqrtPX96 && numerator1 > product);\n            uint256 denominator = numerator1 - product;\n            return FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator).toUint160();\n        }\n    }\n\n    /// @notice Gets the next sqrt price given a delta of token1\n    /// @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least\n    /// far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the\n    /// price less in order to not send too much output.\n    /// The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity\n    /// @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta\n    /// @param liquidity The amount of usable liquidity\n    /// @param amount How much of token1 to add, or remove, from virtual reserves\n    /// @param add Whether to add, or remove, the amount of token1\n    /// @return The price after adding or removing `amount`\n    function getNextSqrtPriceFromAmount1RoundingDown(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amount,\n        bool add\n    ) internal pure returns (uint160) {\n        // if we're adding (subtracting), rounding down requires rounding the quotient down (up)\n        // in both cases, avoid a mulDiv for most inputs\n        if (add) {\n            uint256 quotient =\n                (\n                    amount <= type(uint160).max\n                        ? (amount << FixedPoint96.RESOLUTION) / liquidity\n                        : FullMath.mulDiv(amount, FixedPoint96.Q96, liquidity)\n                );\n\n            return uint256(sqrtPX96).add(quotient).toUint160();\n        } else {\n            uint256 quotient =\n                (\n                    amount <= type(uint160).max\n                        ? UnsafeMath.divRoundingUp(amount << FixedPoint96.RESOLUTION, liquidity)\n                        : FullMath.mulDivRoundingUp(amount, FixedPoint96.Q96, liquidity)\n                );\n\n            require(sqrtPX96 > quotient);\n            // always fits 160 bits\n            return uint160(sqrtPX96 - quotient);\n        }\n    }\n\n    /// @notice Gets the next sqrt price given an input amount of token0 or token1\n    /// @dev Throws if price or liquidity are 0, or if the next price is out of bounds\n    /// @param sqrtPX96 The starting price, i.e., before accounting for the input amount\n    /// @param liquidity The amount of usable liquidity\n    /// @param amountIn How much of token0, or token1, is being swapped in\n    /// @param zeroForOne Whether the amount in is token0 or token1\n    /// @return sqrtQX96 The price after adding the input amount to token0 or token1\n    function getNextSqrtPriceFromInput(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amountIn,\n        bool zeroForOne\n    ) internal pure returns (uint160 sqrtQX96) {\n        require(sqrtPX96 > 0);\n        require(liquidity > 0);\n\n        // round to make sure that we don't pass the target price\n        return\n            zeroForOne\n                ? getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true)\n                : getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true);\n    }\n\n    /// @notice Gets the next sqrt price given an output amount of token0 or token1\n    /// @dev Throws if price or liquidity are 0 or the next price is out of bounds\n    /// @param sqrtPX96 The starting price before accounting for the output amount\n    /// @param liquidity The amount of usable liquidity\n    /// @param amountOut How much of token0, or token1, is being swapped out\n    /// @param zeroForOne Whether the amount out is token0 or token1\n    /// @return sqrtQX96 The price after removing the output amount of token0 or token1\n    function getNextSqrtPriceFromOutput(\n        uint160 sqrtPX96,\n        uint128 liquidity,\n        uint256 amountOut,\n        bool zeroForOne\n    ) internal pure returns (uint160 sqrtQX96) {\n        require(sqrtPX96 > 0);\n        require(liquidity > 0);\n\n        // round to make sure that we pass the target price\n        return\n            zeroForOne\n                ? getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false)\n                : getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false);\n    }\n\n    /// @notice Gets the amount0 delta between two prices\n    /// @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper),\n    /// i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The amount of usable liquidity\n    /// @param roundUp Whether to round the amount up or down\n    /// @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices\n    function getAmount0Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        uint128 liquidity,\n        bool roundUp\n    ) internal pure returns (uint256 amount0) {\n        if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n        uint256 numerator1 = uint256(liquidity) << FixedPoint96.RESOLUTION;\n        uint256 numerator2 = sqrtRatioBX96 - sqrtRatioAX96;\n\n        require(sqrtRatioAX96 > 0);\n\n        return\n            roundUp\n                ? UnsafeMath.divRoundingUp(\n                    FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96),\n                    sqrtRatioAX96\n                )\n                : FullMath.mulDiv(numerator1, numerator2, sqrtRatioBX96) / sqrtRatioAX96;\n    }\n\n    /// @notice Gets the amount1 delta between two prices\n    /// @dev Calculates liquidity * (sqrt(upper) - sqrt(lower))\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The amount of usable liquidity\n    /// @param roundUp Whether to round the amount up, or down\n    /// @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices\n    function getAmount1Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        uint128 liquidity,\n        bool roundUp\n    ) internal pure returns (uint256 amount1) {\n        if (sqrtRatioAX96 > sqrtRatioBX96) (sqrtRatioAX96, sqrtRatioBX96) = (sqrtRatioBX96, sqrtRatioAX96);\n\n        return\n            roundUp\n                ? FullMath.mulDivRoundingUp(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96)\n                : FullMath.mulDiv(liquidity, sqrtRatioBX96 - sqrtRatioAX96, FixedPoint96.Q96);\n    }\n\n    /// @notice Helper that gets signed token0 delta\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The change in liquidity for which to compute the amount0 delta\n    /// @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices\n    function getAmount0Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        int128 liquidity\n    ) internal pure returns (int256 amount0) {\n        return\n            liquidity < 0\n                ? -getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256()\n                : getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256();\n    }\n\n    /// @notice Helper that gets signed token1 delta\n    /// @param sqrtRatioAX96 A sqrt price\n    /// @param sqrtRatioBX96 Another sqrt price\n    /// @param liquidity The change in liquidity for which to compute the amount1 delta\n    /// @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices\n    function getAmount1Delta(\n        uint160 sqrtRatioAX96,\n        uint160 sqrtRatioBX96,\n        int128 liquidity\n    ) internal pure returns (int256 amount1) {\n        return\n            liquidity < 0\n                ? -getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(-liquidity), false).toInt256()\n                : getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, uint128(liquidity), true).toInt256();\n    }\n}\n",
  "sourcePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SqrtPriceMath.sol",
  "ast": {
    "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SqrtPriceMath.sol",
    "exportedSymbols": {
      "FixedPoint96": [
        3817
      ],
      "FullMath": [
        3990
      ],
      "LowGasSafeMath": [
        4172
      ],
      "SafeCast": [
        5150
      ],
      "SqrtPriceMath": [
        5666
      ],
      "UnsafeMath": [
        7237
      ]
    },
    "id": 5667,
    "license": "BUSL-1.1",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5152,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "37:24:26"
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LowGasSafeMath.sol",
        "file": "./LowGasSafeMath.sol",
        "id": 5153,
        "nodeType": "ImportDirective",
        "scope": 5667,
        "sourceUnit": 4173,
        "src": "63:30:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SafeCast.sol",
        "file": "./SafeCast.sol",
        "id": 5154,
        "nodeType": "ImportDirective",
        "scope": 5667,
        "sourceUnit": 5151,
        "src": "94:24:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FullMath.sol",
        "file": "./FullMath.sol",
        "id": 5155,
        "nodeType": "ImportDirective",
        "scope": 5667,
        "sourceUnit": 3991,
        "src": "120:24:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/UnsafeMath.sol",
        "file": "./UnsafeMath.sol",
        "id": 5156,
        "nodeType": "ImportDirective",
        "scope": 5667,
        "sourceUnit": 7238,
        "src": "145:26:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint96.sol",
        "file": "./FixedPoint96.sol",
        "id": 5157,
        "nodeType": "ImportDirective",
        "scope": 5667,
        "sourceUnit": 3818,
        "src": "172:28:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 5158,
          "nodeType": "StructuredDocumentation",
          "src": "202:167:26",
          "text": "@title Functions based on Q64.96 sqrt price and liquidity\n @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas"
        },
        "fullyImplemented": true,
        "id": 5666,
        "linearizedBaseContracts": [
          5666
        ],
        "name": "SqrtPriceMath",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5161,
            "libraryName": {
              "id": 5159,
              "name": "LowGasSafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4172,
              "src": "403:14:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_LowGasSafeMath_$4172",
                "typeString": "library LowGasSafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "397:33:26",
            "typeName": {
              "id": 5160,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "422:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 5164,
            "libraryName": {
              "id": 5162,
              "name": "SafeCast",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5150,
              "src": "441:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeCast_$5150",
                "typeString": "library SafeCast"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "435:27:26",
            "typeName": {
              "id": 5163,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "454:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 5283,
              "nodeType": "Block",
              "src": "1585:1186:26",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5178,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5171,
                      "src": "1711:6:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1721:1:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1711:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5183,
                  "nodeType": "IfStatement",
                  "src": "1707:32:26",
                  "trueBody": {
                    "expression": {
                      "id": 5181,
                      "name": "sqrtPX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5167,
                      "src": "1731:8:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "functionReturnParameters": 5177,
                    "id": 5182,
                    "nodeType": "Return",
                    "src": "1724:15:26"
                  }
                },
                {
                  "assignments": [
                    5185
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5185,
                      "mutability": "mutable",
                      "name": "numerator1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5283,
                      "src": "1749:18:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5184,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1749:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5193,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 5188,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5169,
                          "src": "1778:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        ],
                        "id": 5187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1770:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 5186,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1770:7:26",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 5189,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1770:18:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "expression": {
                        "id": 5190,
                        "name": "FixedPoint96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3817,
                        "src": "1792:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                          "typeString": "type(library FixedPoint96)"
                        }
                      },
                      "id": 5191,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "RESOLUTION",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3813,
                      "src": "1792:23:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "1770:45:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1749:66:26"
                },
                {
                  "condition": {
                    "id": 5194,
                    "name": "add",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5173,
                    "src": "1830:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5281,
                    "nodeType": "Block",
                    "src": "2321:444:26",
                    "statements": [
                      {
                        "assignments": [
                          5247
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5247,
                            "mutability": "mutable",
                            "name": "product",
                            "nodeType": "VariableDeclaration",
                            "scope": 5281,
                            "src": "2335:15:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5246,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2335:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5248,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2335:15:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5263,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5259,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5257,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "id": 5254,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 5250,
                                          "name": "product",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5247,
                                          "src": "2531:7:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5253,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5251,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5171,
                                            "src": "2541:6:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "id": 5252,
                                            "name": "sqrtPX96",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5167,
                                            "src": "2550:8:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          },
                                          "src": "2541:17:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "2531:27:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 5255,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "2530:29:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 5256,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5171,
                                    "src": "2562:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2530:38:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "id": 5258,
                                  "name": "sqrtPX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5167,
                                  "src": "2572:8:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "2530:50:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5262,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5260,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5185,
                                  "src": "2584:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "id": 5261,
                                  "name": "product",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5247,
                                  "src": "2597:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2584:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2530:74:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5249,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "2522:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 5264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2522:83:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5265,
                        "nodeType": "ExpressionStatement",
                        "src": "2522:83:26"
                      },
                      {
                        "assignments": [
                          5267
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5267,
                            "mutability": "mutable",
                            "name": "denominator",
                            "nodeType": "VariableDeclaration",
                            "scope": 5281,
                            "src": "2619:19:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5266,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2619:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5271,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5268,
                            "name": "numerator1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5185,
                            "src": "2641:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 5269,
                            "name": "product",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5247,
                            "src": "2654:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2641:20:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2619:42:26"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5274,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5185,
                                  "src": "2708:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 5275,
                                  "name": "sqrtPX96",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5167,
                                  "src": "2720:8:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                {
                                  "id": 5276,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5267,
                                  "src": "2730:11:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 5272,
                                  "name": "FullMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3990,
                                  "src": "2682:8:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                                    "typeString": "type(library FullMath)"
                                  }
                                },
                                "id": 5273,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mulDivRoundingUp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3989,
                                "src": "2682:25:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5277,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2682:60:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toUint160",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5104,
                            "src": "2682:70:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint160_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint160)"
                            }
                          },
                          "id": 5279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2682:72:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 5177,
                        "id": 5280,
                        "nodeType": "Return",
                        "src": "2675:79:26"
                      }
                    ]
                  },
                  "id": 5282,
                  "nodeType": "IfStatement",
                  "src": "1826:939:26",
                  "trueBody": {
                    "id": 5245,
                    "nodeType": "Block",
                    "src": "1835:480:26",
                    "statements": [
                      {
                        "assignments": [
                          5196
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5196,
                            "mutability": "mutable",
                            "name": "product",
                            "nodeType": "VariableDeclaration",
                            "scope": 5245,
                            "src": "1849:15:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5195,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1849:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5197,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1849:15:26"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5205,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "id": 5202,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 5198,
                                    "name": "product",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5196,
                                    "src": "1883:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5201,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5199,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5171,
                                      "src": "1893:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 5200,
                                      "name": "sqrtPX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5167,
                                      "src": "1902:8:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "src": "1893:17:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1883:27:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 5203,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1882:29:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "id": 5204,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5171,
                              "src": "1914:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1882:38:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 5206,
                            "name": "sqrtPX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5167,
                            "src": "1924:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "1882:50:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5229,
                        "nodeType": "IfStatement",
                        "src": "1878:323:26",
                        "trueBody": {
                          "id": 5228,
                          "nodeType": "Block",
                          "src": "1934:267:26",
                          "statements": [
                            {
                              "assignments": [
                                5209
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 5209,
                                  "mutability": "mutable",
                                  "name": "denominator",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 5228,
                                  "src": "1952:19:26",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 5208,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1952:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 5213,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5210,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5185,
                                  "src": "1974:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 5211,
                                  "name": "product",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5196,
                                  "src": "1987:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1974:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "1952:42:26"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5216,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5214,
                                  "name": "denominator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5209,
                                  "src": "2016:11:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 5215,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5185,
                                  "src": "2031:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2016:25:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 5227,
                              "nodeType": "IfStatement",
                              "src": "2012:174:26",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 5221,
                                          "name": "numerator1",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5185,
                                          "src": "2151:10:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 5222,
                                          "name": "sqrtPX96",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5167,
                                          "src": "2163:8:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          }
                                        },
                                        {
                                          "id": 5223,
                                          "name": "denominator",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5209,
                                          "src": "2173:11:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 5219,
                                          "name": "FullMath",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3990,
                                          "src": "2125:8:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                                            "typeString": "type(library FullMath)"
                                          }
                                        },
                                        "id": 5220,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mulDivRoundingUp",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3989,
                                        "src": "2125:25:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 5224,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2125:60:26",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 5218,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2117:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint160_$",
                                      "typeString": "type(uint160)"
                                    },
                                    "typeName": {
                                      "id": 5217,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2117:7:26",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5225,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2117:69:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "functionReturnParameters": 5177,
                                "id": 5226,
                                "nodeType": "Return",
                                "src": "2110:76:26"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 5234,
                                  "name": "numerator1",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5185,
                                  "src": "2255:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 5240,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5171,
                                      "src": "2295:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 5237,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 5235,
                                            "name": "numerator1",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5185,
                                            "src": "2268:10:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "/",
                                          "rightExpression": {
                                            "id": 5236,
                                            "name": "sqrtPX96",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5167,
                                            "src": "2281:8:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            }
                                          },
                                          "src": "2268:21:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 5238,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "2267:23:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5239,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4067,
                                    "src": "2267:27:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5241,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2267:35:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 5232,
                                  "name": "UnsafeMath",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7237,
                                  "src": "2230:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_UnsafeMath_$7237_$",
                                    "typeString": "type(library UnsafeMath)"
                                  }
                                },
                                "id": 5233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "divRoundingUp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7236,
                                "src": "2230:24:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5242,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2230:73:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5231,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2222:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 5230,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "2222:7:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2222:82:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 5177,
                        "id": 5244,
                        "nodeType": "Return",
                        "src": "2215:89:26"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 5165,
              "nodeType": "StructuredDocumentation",
              "src": "468:932:26",
              "text": "@notice Gets the next sqrt price given a delta of token0\n @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the\n price less in order to not send too much output.\n The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96),\n if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount).\n @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token0 to add or remove from virtual reserves\n @param add Whether to add or remove the amount of token0\n @return The price after adding or removing amount, depending on add"
            },
            "id": 5284,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromAmount0RoundingUp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5174,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5167,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5284,
                  "src": "1461:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5166,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "1461:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5169,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5284,
                  "src": "1487:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 5168,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "1487:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5171,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5284,
                  "src": "1514:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5170,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1514:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5173,
                  "mutability": "mutable",
                  "name": "add",
                  "nodeType": "VariableDeclaration",
                  "scope": 5284,
                  "src": "1538:8:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5172,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1538:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1451:101:26"
            },
            "returnParameters": {
              "id": 5177,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5176,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5284,
                  "src": "1576:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5175,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "1576:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1575:9:26"
            },
            "scope": 5666,
            "src": "1405:1366:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5378,
              "nodeType": "Block",
              "src": "3779:971:26",
              "statements": [
                {
                  "condition": {
                    "id": 5298,
                    "name": "add",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5293,
                    "src": "3947:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5376,
                    "nodeType": "Block",
                    "src": "4303:441:26",
                    "statements": [
                      {
                        "assignments": [
                          5337
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5337,
                            "mutability": "mutable",
                            "name": "quotient",
                            "nodeType": "VariableDeclaration",
                            "scope": 5376,
                            "src": "4317:16:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5336,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4317:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5362,
                        "initialValue": {
                          "components": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5344,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5338,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5291,
                                  "src": "4374:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5341,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "4389:7:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 5340,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "4389:7:26",
                                          "typeDescriptions": {}
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        }
                                      ],
                                      "id": 5339,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967269,
                                      "src": "4384:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 5342,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4384:13:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint160",
                                      "typeString": "type(uint160)"
                                    }
                                  },
                                  "id": 5343,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "src": "4384:17:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4374:27:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "arguments": [
                                  {
                                    "id": 5355,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5291,
                                    "src": "4551:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 5356,
                                      "name": "FixedPoint96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3817,
                                      "src": "4559:12:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                                        "typeString": "type(library FixedPoint96)"
                                      }
                                    },
                                    "id": 5357,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Q96",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3816,
                                    "src": "4559:16:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5358,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5289,
                                    "src": "4577:9:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5353,
                                    "name": "FullMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3990,
                                    "src": "4525:8:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                                      "typeString": "type(library FullMath)"
                                    }
                                  },
                                  "id": 5354,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mulDivRoundingUp",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3989,
                                  "src": "4525:25:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5359,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4525:62:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "4374:213:26",
                              "trueExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5350,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5347,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5291,
                                      "src": "4453:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 5348,
                                        "name": "FixedPoint96",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3817,
                                        "src": "4463:12:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                                          "typeString": "type(library FixedPoint96)"
                                        }
                                      },
                                      "id": 5349,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "RESOLUTION",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3813,
                                      "src": "4463:23:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "4453:33:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5351,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5289,
                                    "src": "4488:9:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5345,
                                    "name": "UnsafeMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7237,
                                    "src": "4428:10:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_UnsafeMath_$7237_$",
                                      "typeString": "type(library UnsafeMath)"
                                    }
                                  },
                                  "id": 5346,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "divRoundingUp",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7236,
                                  "src": "4428:24:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4428:70:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 5361,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4352:253:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4317:288:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5366,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5364,
                                "name": "sqrtPX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5287,
                                "src": "4628:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 5365,
                                "name": "quotient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5337,
                                "src": "4639:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4628:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5363,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "4620:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 5367,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4620:28:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5368,
                        "nodeType": "ExpressionStatement",
                        "src": "4620:28:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5371,
                                "name": "sqrtPX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5287,
                                "src": "4713:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 5372,
                                "name": "quotient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5337,
                                "src": "4724:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4713:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5370,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4705:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 5369,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "4705:7:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4705:28:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 5297,
                        "id": 5375,
                        "nodeType": "Return",
                        "src": "4698:35:26"
                      }
                    ]
                  },
                  "id": 5377,
                  "nodeType": "IfStatement",
                  "src": "3943:801:26",
                  "trueBody": {
                    "id": 5335,
                    "nodeType": "Block",
                    "src": "3952:345:26",
                    "statements": [
                      {
                        "assignments": [
                          5300
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5300,
                            "mutability": "mutable",
                            "name": "quotient",
                            "nodeType": "VariableDeclaration",
                            "scope": 5335,
                            "src": "3966:16:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5299,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3966:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5324,
                        "initialValue": {
                          "components": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5301,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5291,
                                  "src": "4023:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 5304,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "4038:7:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 5303,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "4038:7:26",
                                          "typeDescriptions": {}
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        }
                                      ],
                                      "id": 5302,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4294967269,
                                      "src": "4033:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 5305,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4033:13:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint160",
                                      "typeString": "type(uint160)"
                                    }
                                  },
                                  "id": 5306,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "src": "4033:17:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "4023:27:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "arguments": [
                                  {
                                    "id": 5317,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5291,
                                    "src": "4167:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 5318,
                                      "name": "FixedPoint96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3817,
                                      "src": "4175:12:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                                        "typeString": "type(library FixedPoint96)"
                                      }
                                    },
                                    "id": 5319,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Q96",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3816,
                                    "src": "4175:16:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5320,
                                    "name": "liquidity",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5289,
                                    "src": "4193:9:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5315,
                                    "name": "FullMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3990,
                                    "src": "4151:8:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                                      "typeString": "type(library FullMath)"
                                    }
                                  },
                                  "id": 5316,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mulDiv",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3946,
                                  "src": "4151:15:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5321,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4151:52:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5322,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "4023:180:26",
                              "trueExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5314,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 5311,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 5308,
                                        "name": "amount",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5291,
                                        "src": "4078:6:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<<",
                                      "rightExpression": {
                                        "expression": {
                                          "id": 5309,
                                          "name": "FixedPoint96",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3817,
                                          "src": "4088:12:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                                            "typeString": "type(library FixedPoint96)"
                                          }
                                        },
                                        "id": 5310,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "RESOLUTION",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3813,
                                        "src": "4088:23:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "src": "4078:33:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 5312,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "4077:35:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "id": 5313,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5289,
                                  "src": "4115:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                },
                                "src": "4077:47:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 5323,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4001:220:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3966:255:26"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5330,
                                  "name": "quotient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5300,
                                  "src": "4265:8:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 5327,
                                      "name": "sqrtPX96",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5287,
                                      "src": "4251:8:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    ],
                                    "id": 5326,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4243:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 5325,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4243:7:26",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5328,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4243:17:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5329,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4067,
                                "src": "4243:21:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4243:31:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toUint160",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5104,
                            "src": "4243:41:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint160_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint160)"
                            }
                          },
                          "id": 5333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4243:43:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 5297,
                        "id": 5334,
                        "nodeType": "Return",
                        "src": "4236:50:26"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 5285,
              "nodeType": "StructuredDocumentation",
              "src": "2777:815:26",
              "text": "@notice Gets the next sqrt price given a delta of token1\n @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the\n price less in order to not send too much output.\n The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity\n @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token1 to add, or remove, from virtual reserves\n @param add Whether to add, or remove, the amount of token1\n @return The price after adding or removing `amount`"
            },
            "id": 5379,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromAmount1RoundingDown",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5287,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5379,
                  "src": "3655:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5286,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "3655:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5289,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5379,
                  "src": "3681:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 5288,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3681:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5291,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 5379,
                  "src": "3708:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3708:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5293,
                  "mutability": "mutable",
                  "name": "add",
                  "nodeType": "VariableDeclaration",
                  "scope": 5379,
                  "src": "3732:8:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5292,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3732:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3645:101:26"
            },
            "returnParameters": {
              "id": 5297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5296,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5379,
                  "src": "3770:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5295,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "3770:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3769:9:26"
            },
            "scope": 5666,
            "src": "3597:1153:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5420,
              "nodeType": "Block",
              "src": "5485:364:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 5396,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5394,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5382,
                          "src": "5503:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 5395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5514:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5503:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5393,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5495:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 5397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5495:21:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5398,
                  "nodeType": "ExpressionStatement",
                  "src": "5495:21:26"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 5402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5400,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5384,
                          "src": "5534:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 5401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5546:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5534:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5399,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5526:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 5403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5526:22:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5404,
                  "nodeType": "ExpressionStatement",
                  "src": "5526:22:26"
                },
                {
                  "expression": {
                    "condition": {
                      "id": 5405,
                      "name": "zeroForOne",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5388,
                      "src": "5644:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [
                        {
                          "id": 5413,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5382,
                          "src": "5806:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "id": 5414,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5384,
                          "src": "5816:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "id": 5415,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5386,
                          "src": "5827:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "hexValue": "74727565",
                          "id": 5416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5837:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 5412,
                        "name": "getNextSqrtPriceFromAmount1RoundingDown",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5379,
                        "src": "5766:39:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 5417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5766:76:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "id": 5418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5644:198:26",
                    "trueExpression": {
                      "arguments": [
                        {
                          "id": 5407,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5382,
                          "src": "5711:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "id": 5408,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5384,
                          "src": "5721:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "id": 5409,
                          "name": "amountIn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5386,
                          "src": "5732:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "hexValue": "74727565",
                          "id": 5410,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5742:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 5406,
                        "name": "getNextSqrtPriceFromAmount0RoundingUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5284,
                        "src": "5673:37:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 5411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5673:74:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "functionReturnParameters": 5392,
                  "id": 5419,
                  "nodeType": "Return",
                  "src": "5625:217:26"
                }
              ]
            },
            "documentation": {
              "id": 5380,
              "nodeType": "StructuredDocumentation",
              "src": "4756:538:26",
              "text": "@notice Gets the next sqrt price given an input amount of token0 or token1\n @dev Throws if price or liquidity are 0, or if the next price is out of bounds\n @param sqrtPX96 The starting price, i.e., before accounting for the input amount\n @param liquidity The amount of usable liquidity\n @param amountIn How much of token0, or token1, is being swapped in\n @param zeroForOne Whether the amount in is token0 or token1\n @return sqrtQX96 The price after adding the input amount to token0 or token1"
            },
            "id": 5421,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromInput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5389,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5382,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5421,
                  "src": "5343:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5381,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "5343:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5384,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5421,
                  "src": "5369:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 5383,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "5369:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5386,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "scope": 5421,
                  "src": "5396:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5396:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5388,
                  "mutability": "mutable",
                  "name": "zeroForOne",
                  "nodeType": "VariableDeclaration",
                  "scope": 5421,
                  "src": "5422:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5387,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5422:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5333:110:26"
            },
            "returnParameters": {
              "id": 5392,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5391,
                  "mutability": "mutable",
                  "name": "sqrtQX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5421,
                  "src": "5467:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5390,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "5467:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5466:18:26"
            },
            "scope": 5666,
            "src": "5299:550:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5462,
              "nodeType": "Block",
              "src": "6583:362:26",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 5438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5436,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5424,
                          "src": "6601:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 5437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6612:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6601:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5435,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6593:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 5439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6593:21:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5440,
                  "nodeType": "ExpressionStatement",
                  "src": "6593:21:26"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 5444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5442,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5426,
                          "src": "6632:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 5443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6644:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "6632:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5441,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6624:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 5445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6624:22:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5446,
                  "nodeType": "ExpressionStatement",
                  "src": "6624:22:26"
                },
                {
                  "expression": {
                    "condition": {
                      "id": 5447,
                      "name": "zeroForOne",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5430,
                      "src": "6736:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [
                        {
                          "id": 5455,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5424,
                          "src": "6900:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "id": 5456,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5426,
                          "src": "6910:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "id": 5457,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5428,
                          "src": "6921:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "hexValue": "66616c7365",
                          "id": 5458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6932:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 5454,
                        "name": "getNextSqrtPriceFromAmount0RoundingUp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5284,
                        "src": "6862:37:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 5459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6862:76:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "id": 5460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6736:202:26",
                    "trueExpression": {
                      "arguments": [
                        {
                          "id": 5449,
                          "name": "sqrtPX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5424,
                          "src": "6805:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "id": 5450,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5426,
                          "src": "6815:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "id": 5451,
                          "name": "amountOut",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5428,
                          "src": "6826:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "hexValue": "66616c7365",
                          "id": 5452,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6837:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 5448,
                        "name": "getNextSqrtPriceFromAmount1RoundingDown",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5379,
                        "src": "6765:39:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint128_$_t_uint256_$_t_bool_$returns$_t_uint160_$",
                          "typeString": "function (uint160,uint128,uint256,bool) pure returns (uint160)"
                        }
                      },
                      "id": 5453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6765:78:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "functionReturnParameters": 5434,
                  "id": 5461,
                  "nodeType": "Return",
                  "src": "6717:221:26"
                }
              ]
            },
            "documentation": {
              "id": 5422,
              "nodeType": "StructuredDocumentation",
              "src": "5855:535:26",
              "text": "@notice Gets the next sqrt price given an output amount of token0 or token1\n @dev Throws if price or liquidity are 0 or the next price is out of bounds\n @param sqrtPX96 The starting price before accounting for the output amount\n @param liquidity The amount of usable liquidity\n @param amountOut How much of token0, or token1, is being swapped out\n @param zeroForOne Whether the amount out is token0 or token1\n @return sqrtQX96 The price after removing the output amount of token0 or token1"
            },
            "id": 5463,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextSqrtPriceFromOutput",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5424,
                  "mutability": "mutable",
                  "name": "sqrtPX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5463,
                  "src": "6440:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5423,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "6440:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5426,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5463,
                  "src": "6466:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 5425,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "6466:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5428,
                  "mutability": "mutable",
                  "name": "amountOut",
                  "nodeType": "VariableDeclaration",
                  "scope": 5463,
                  "src": "6493:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5427,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6493:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5430,
                  "mutability": "mutable",
                  "name": "zeroForOne",
                  "nodeType": "VariableDeclaration",
                  "scope": 5463,
                  "src": "6520:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5429,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6520:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6430:111:26"
            },
            "returnParameters": {
              "id": 5434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5433,
                  "mutability": "mutable",
                  "name": "sqrtQX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5463,
                  "src": "6565:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5432,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "6565:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6564:18:26"
            },
            "scope": 5666,
            "src": "6395:550:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5532,
              "nodeType": "Block",
              "src": "7675:597:26",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 5479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5477,
                      "name": "sqrtRatioAX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5466,
                      "src": "7689:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 5478,
                      "name": "sqrtRatioBX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5468,
                      "src": "7705:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "src": "7689:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5488,
                  "nodeType": "IfStatement",
                  "src": "7685:98:26",
                  "trueBody": {
                    "expression": {
                      "id": 5486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "components": [
                          {
                            "id": 5480,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5466,
                            "src": "7721:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "id": 5481,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5468,
                            "src": "7736:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 5482,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "TupleExpression",
                        "src": "7720:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "components": [
                          {
                            "id": 5483,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5468,
                            "src": "7754:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "id": 5484,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5466,
                            "src": "7769:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 5485,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "7753:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "src": "7720:63:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 5487,
                    "nodeType": "ExpressionStatement",
                    "src": "7720:63:26"
                  }
                },
                {
                  "assignments": [
                    5490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5490,
                      "mutability": "mutable",
                      "name": "numerator1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5532,
                      "src": "7794:18:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5489,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7794:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5498,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 5493,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5470,
                          "src": "7823:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        ],
                        "id": 5492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "7815:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": {
                          "id": 5491,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7815:7:26",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 5494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7815:18:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<<",
                    "rightExpression": {
                      "expression": {
                        "id": 5495,
                        "name": "FixedPoint96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3817,
                        "src": "7837:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                          "typeString": "type(library FixedPoint96)"
                        }
                      },
                      "id": 5496,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "RESOLUTION",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3813,
                      "src": "7837:23:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "7815:45:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7794:66:26"
                },
                {
                  "assignments": [
                    5500
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5500,
                      "mutability": "mutable",
                      "name": "numerator2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5532,
                      "src": "7870:18:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5499,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7870:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5504,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 5503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5501,
                      "name": "sqrtRatioBX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5468,
                      "src": "7891:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 5502,
                      "name": "sqrtRatioAX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5466,
                      "src": "7907:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "src": "7891:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7870:50:26"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 5508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5506,
                          "name": "sqrtRatioAX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5466,
                          "src": "7939:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 5507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7955:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7939:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5505,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7931:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 5509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7931:26:26",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5510,
                  "nodeType": "ExpressionStatement",
                  "src": "7931:26:26"
                },
                {
                  "expression": {
                    "condition": {
                      "id": 5511,
                      "name": "roundUp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5472,
                      "src": "7987:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5529,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 5524,
                            "name": "numerator1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5490,
                            "src": "8211:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 5525,
                            "name": "numerator2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5500,
                            "src": "8223:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 5526,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5468,
                            "src": "8235:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "expression": {
                            "id": 5522,
                            "name": "FullMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3990,
                            "src": "8195:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                              "typeString": "type(library FullMath)"
                            }
                          },
                          "id": 5523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mulDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3946,
                          "src": "8195:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8195:54:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "/",
                      "rightExpression": {
                        "id": 5528,
                        "name": "sqrtRatioAX96",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5466,
                        "src": "8252:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      "src": "8195:70:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "7987:278:26",
                    "trueExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 5516,
                              "name": "numerator1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5490,
                              "src": "8085:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5517,
                              "name": "numerator2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5500,
                              "src": "8097:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5518,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5468,
                              "src": "8109:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            ],
                            "expression": {
                              "id": 5514,
                              "name": "FullMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3990,
                              "src": "8059:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                                "typeString": "type(library FullMath)"
                              }
                            },
                            "id": 5515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mulDivRoundingUp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3989,
                            "src": "8059:25:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8059:64:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 5520,
                          "name": "sqrtRatioAX96",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5466,
                          "src": "8145:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        ],
                        "expression": {
                          "id": 5512,
                          "name": "UnsafeMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7237,
                          "src": "8013:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_UnsafeMath_$7237_$",
                            "typeString": "type(library UnsafeMath)"
                          }
                        },
                        "id": 5513,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "divRoundingUp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7236,
                        "src": "8013:24:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5521,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8013:163:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5476,
                  "id": 5531,
                  "nodeType": "Return",
                  "src": "7968:297:26"
                }
              ]
            },
            "documentation": {
              "id": 5464,
              "nodeType": "StructuredDocumentation",
              "src": "6951:537:26",
              "text": "@notice Gets the amount0 delta between two prices\n @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper),\n i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up or down\n @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices"
            },
            "id": 5533,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount0Delta",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5473,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5466,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5533,
                  "src": "7527:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5465,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "7527:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5468,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5533,
                  "src": "7558:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5467,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "7558:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5470,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5533,
                  "src": "7589:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 5469,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "7589:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5472,
                  "mutability": "mutable",
                  "name": "roundUp",
                  "nodeType": "VariableDeclaration",
                  "scope": 5533,
                  "src": "7616:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5471,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7616:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7517:117:26"
            },
            "returnParameters": {
              "id": 5476,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5475,
                  "mutability": "mutable",
                  "name": "amount0",
                  "nodeType": "VariableDeclaration",
                  "scope": 5533,
                  "src": "7658:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5474,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7658:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7657:17:26"
            },
            "scope": 5666,
            "src": "7493:779:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5580,
              "nodeType": "Block",
              "src": "8909:350:26",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    },
                    "id": 5549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5547,
                      "name": "sqrtRatioAX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5536,
                      "src": "8923:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 5548,
                      "name": "sqrtRatioBX96",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5538,
                      "src": "8939:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "src": "8923:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5558,
                  "nodeType": "IfStatement",
                  "src": "8919:98:26",
                  "trueBody": {
                    "expression": {
                      "id": 5556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "components": [
                          {
                            "id": 5550,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5536,
                            "src": "8955:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "id": 5551,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5538,
                            "src": "8970:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 5552,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "nodeType": "TupleExpression",
                        "src": "8954:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "components": [
                          {
                            "id": 5553,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5538,
                            "src": "8988:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          {
                            "id": 5554,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5536,
                            "src": "9003:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "id": 5555,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "8987:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$_t_uint160_$_t_uint160_$",
                          "typeString": "tuple(uint160,uint160)"
                        }
                      },
                      "src": "8954:63:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 5557,
                    "nodeType": "ExpressionStatement",
                    "src": "8954:63:26"
                  }
                },
                {
                  "expression": {
                    "condition": {
                      "id": 5559,
                      "name": "roundUp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5542,
                      "src": "9047:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [
                        {
                          "id": 5571,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5540,
                          "src": "9193:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 5574,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5572,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5538,
                            "src": "9204:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 5573,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5536,
                            "src": "9220:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "9204:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "expression": {
                            "id": 5575,
                            "name": "FixedPoint96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3817,
                            "src": "9235:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                              "typeString": "type(library FixedPoint96)"
                            }
                          },
                          "id": 5576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "Q96",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3816,
                          "src": "9235:16:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 5569,
                          "name": "FullMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3990,
                          "src": "9177:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                            "typeString": "type(library FullMath)"
                          }
                        },
                        "id": 5570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mulDiv",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3946,
                        "src": "9177:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9177:75:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 5578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "9047:205:26",
                    "trueExpression": {
                      "arguments": [
                        {
                          "id": 5562,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5540,
                          "src": "9099:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "id": 5565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5563,
                            "name": "sqrtRatioBX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5538,
                            "src": "9110:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 5564,
                            "name": "sqrtRatioAX96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5536,
                            "src": "9126:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "9110:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        {
                          "expression": {
                            "id": 5566,
                            "name": "FixedPoint96",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3817,
                            "src": "9141:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FixedPoint96_$3817_$",
                              "typeString": "type(library FixedPoint96)"
                            }
                          },
                          "id": 5567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "Q96",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3816,
                          "src": "9141:16:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 5560,
                          "name": "FullMath",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3990,
                          "src": "9073:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                            "typeString": "type(library FullMath)"
                          }
                        },
                        "id": 5561,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "mulDivRoundingUp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3989,
                        "src": "9073:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 5568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9073:85:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5546,
                  "id": 5579,
                  "nodeType": "Return",
                  "src": "9028:224:26"
                }
              ]
            },
            "documentation": {
              "id": 5534,
              "nodeType": "StructuredDocumentation",
              "src": "8278:444:26",
              "text": "@notice Gets the amount1 delta between two prices\n @dev Calculates liquidity * (sqrt(upper) - sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up, or down\n @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices"
            },
            "id": 5581,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount1Delta",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5543,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5536,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5581,
                  "src": "8761:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5535,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "8761:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5538,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5581,
                  "src": "8792:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5537,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "8792:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5540,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5581,
                  "src": "8823:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 5539,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "8823:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5542,
                  "mutability": "mutable",
                  "name": "roundUp",
                  "nodeType": "VariableDeclaration",
                  "scope": 5581,
                  "src": "8850:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5541,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8850:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8751:117:26"
            },
            "returnParameters": {
              "id": 5546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5545,
                  "mutability": "mutable",
                  "name": "amount1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5581,
                  "src": "8892:15:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5544,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8892:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8891:17:26"
            },
            "scope": 5666,
            "src": "8727:532:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5622,
              "nodeType": "Block",
              "src": "9761:254:26",
              "statements": [
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_int128",
                        "typeString": "int128"
                      },
                      "id": 5595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5593,
                        "name": "liquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5588,
                        "src": "9790:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 5594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9802:1:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "9790:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "arguments": [
                            {
                              "id": 5610,
                              "name": "sqrtRatioAX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5584,
                              "src": "9942:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 5611,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5586,
                              "src": "9957:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5614,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5588,
                                  "src": "9980:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                ],
                                "id": 5613,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9972:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": {
                                  "id": 5612,
                                  "name": "uint128",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9972:7:26",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5615,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9972:18:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 5616,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9992:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5609,
                            "name": "getAmount0Delta",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5533,
                              5623
                            ],
                            "referencedDeclaration": 5533,
                            "src": "9926:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                              "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                            }
                          },
                          "id": 5617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9926:71:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5618,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toInt256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5149,
                        "src": "9926:80:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (int256)"
                        }
                      },
                      "id": 5619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9926:82:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 5620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "9790:218:26",
                    "trueExpression": {
                      "id": 5608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "9822:85:26",
                      "subExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 5597,
                                "name": "sqrtRatioAX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5584,
                                "src": "9839:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 5598,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5586,
                                "src": "9854:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 5602,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "9877:10:26",
                                    "subExpression": {
                                      "id": 5601,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5588,
                                      "src": "9878:9:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int128",
                                        "typeString": "int128"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  ],
                                  "id": 5600,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9869:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 5599,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9869:7:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9869:19:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "hexValue": "66616c7365",
                                "id": 5604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9890:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 5596,
                              "name": "getAmount0Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                5533,
                                5623
                              ],
                              "referencedDeclaration": 5533,
                              "src": "9823:15:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                              }
                            },
                            "id": 5605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9823:73:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toInt256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5149,
                          "src": "9823:82:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (int256)"
                          }
                        },
                        "id": 5607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9823:84:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 5592,
                  "id": 5621,
                  "nodeType": "Return",
                  "src": "9771:237:26"
                }
              ]
            },
            "documentation": {
              "id": 5582,
              "nodeType": "StructuredDocumentation",
              "src": "9265:333:26",
              "text": "@notice Helper that gets signed token0 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount0 delta\n @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices"
            },
            "id": 5623,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount0Delta",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5584,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5623,
                  "src": "9637:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5583,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "9637:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5586,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5623,
                  "src": "9668:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5585,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "9668:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5588,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5623,
                  "src": "9699:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int128",
                    "typeString": "int128"
                  },
                  "typeName": {
                    "id": 5587,
                    "name": "int128",
                    "nodeType": "ElementaryTypeName",
                    "src": "9699:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int128",
                      "typeString": "int128"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9627:94:26"
            },
            "returnParameters": {
              "id": 5592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5591,
                  "mutability": "mutable",
                  "name": "amount0",
                  "nodeType": "VariableDeclaration",
                  "scope": 5623,
                  "src": "9745:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 5590,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9745:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9744:16:26"
            },
            "scope": 5666,
            "src": "9603:412:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5664,
              "nodeType": "Block",
              "src": "10517:254:26",
              "statements": [
                {
                  "expression": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_int128",
                        "typeString": "int128"
                      },
                      "id": 5637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5635,
                        "name": "liquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5630,
                        "src": "10546:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 5636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10558:1:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "10546:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "arguments": [
                            {
                              "id": 5652,
                              "name": "sqrtRatioAX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5626,
                              "src": "10698:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "id": 5653,
                              "name": "sqrtRatioBX96",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5628,
                              "src": "10713:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5656,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5630,
                                  "src": "10736:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int128",
                                    "typeString": "int128"
                                  }
                                ],
                                "id": 5655,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10728:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint128_$",
                                  "typeString": "type(uint128)"
                                },
                                "typeName": {
                                  "id": 5654,
                                  "name": "uint128",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "10728:7:26",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5657,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10728:18:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 5658,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10748:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5651,
                            "name": "getAmount1Delta",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5581,
                              5665
                            ],
                            "referencedDeclaration": 5581,
                            "src": "10682:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                              "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                            }
                          },
                          "id": 5659,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10682:71:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "toInt256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5149,
                        "src": "10682:80:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (int256)"
                        }
                      },
                      "id": 5661,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10682:82:26",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "id": 5662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "10546:218:26",
                    "trueExpression": {
                      "id": 5650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "10578:85:26",
                      "subExpression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 5639,
                                "name": "sqrtRatioAX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5626,
                                "src": "10595:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "id": 5640,
                                "name": "sqrtRatioBX96",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5628,
                                "src": "10610:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 5644,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "10633:10:26",
                                    "subExpression": {
                                      "id": 5643,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5630,
                                      "src": "10634:9:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int128",
                                        "typeString": "int128"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int128",
                                      "typeString": "int128"
                                    }
                                  ],
                                  "id": 5642,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10625:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 5641,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10625:7:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5645,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10625:19:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "hexValue": "66616c7365",
                                "id": 5646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10646:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 5638,
                              "name": "getAmount1Delta",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                5581,
                                5665
                              ],
                              "referencedDeclaration": 5581,
                              "src": "10579:15:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint160_$_t_uint160_$_t_uint128_$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (uint160,uint160,uint128,bool) pure returns (uint256)"
                              }
                            },
                            "id": 5647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10579:73:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toInt256",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5149,
                          "src": "10579:82:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (int256)"
                          }
                        },
                        "id": 5649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10579:84:26",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 5634,
                  "id": 5663,
                  "nodeType": "Return",
                  "src": "10527:237:26"
                }
              ]
            },
            "documentation": {
              "id": 5624,
              "nodeType": "StructuredDocumentation",
              "src": "10021:333:26",
              "text": "@notice Helper that gets signed token1 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount1 delta\n @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices"
            },
            "id": 5665,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAmount1Delta",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5626,
                  "mutability": "mutable",
                  "name": "sqrtRatioAX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5665,
                  "src": "10393:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5625,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "10393:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5628,
                  "mutability": "mutable",
                  "name": "sqrtRatioBX96",
                  "nodeType": "VariableDeclaration",
                  "scope": 5665,
                  "src": "10424:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 5627,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "10424:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5630,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 5665,
                  "src": "10455:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int128",
                    "typeString": "int128"
                  },
                  "typeName": {
                    "id": 5629,
                    "name": "int128",
                    "nodeType": "ElementaryTypeName",
                    "src": "10455:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int128",
                      "typeString": "int128"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10383:94:26"
            },
            "returnParameters": {
              "id": 5634,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5633,
                  "mutability": "mutable",
                  "name": "amount1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5665,
                  "src": "10501:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 5632,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10501:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10500:16:26"
            },
            "scope": 5666,
            "src": "10359:412:26",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 5667,
        "src": "369:10404:26"
      }
    ],
    "src": "37:10737:26"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SqrtPriceMath.sol",
      "exportedSymbols": {
        "FixedPoint96": [
          3817
        ],
        "FullMath": [
          3990
        ],
        "LowGasSafeMath": [
          4172
        ],
        "SafeCast": [
          5150
        ],
        "SqrtPriceMath": [
          5666
        ],
        "UnsafeMath": [
          7237
        ]
      },
      "license": "BUSL-1.1"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.5",
            ".0"
          ]
        },
        "id": 5152,
        "name": "PragmaDirective",
        "src": "37:24:26"
      },
      {
        "attributes": {
          "SourceUnit": 4173,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LowGasSafeMath.sol",
          "file": "./LowGasSafeMath.sol",
          "scope": 5667,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5153,
        "name": "ImportDirective",
        "src": "63:30:26"
      },
      {
        "attributes": {
          "SourceUnit": 5151,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/SafeCast.sol",
          "file": "./SafeCast.sol",
          "scope": 5667,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5154,
        "name": "ImportDirective",
        "src": "94:24:26"
      },
      {
        "attributes": {
          "SourceUnit": 3991,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FullMath.sol",
          "file": "./FullMath.sol",
          "scope": 5667,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5155,
        "name": "ImportDirective",
        "src": "120:24:26"
      },
      {
        "attributes": {
          "SourceUnit": 7238,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/UnsafeMath.sol",
          "file": "./UnsafeMath.sol",
          "scope": 5667,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5156,
        "name": "ImportDirective",
        "src": "145:26:26"
      },
      {
        "attributes": {
          "SourceUnit": 3818,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint96.sol",
          "file": "./FixedPoint96.sol",
          "scope": 5667,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5157,
        "name": "ImportDirective",
        "src": "172:28:26"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            5666
          ],
          "name": "SqrtPriceMath",
          "scope": 5667
        },
        "children": [
          {
            "attributes": {
              "text": "@title Functions based on Q64.96 sqrt price and liquidity\n @notice Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas"
            },
            "id": 5158,
            "name": "StructuredDocumentation",
            "src": "202:167:26"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "LowGasSafeMath",
                  "referencedDeclaration": 4172,
                  "type": "library LowGasSafeMath"
                },
                "id": 5159,
                "name": "UserDefinedTypeName",
                "src": "403:14:26"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 5160,
                "name": "ElementaryTypeName",
                "src": "422:7:26"
              }
            ],
            "id": 5161,
            "name": "UsingForDirective",
            "src": "397:33:26"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "SafeCast",
                  "referencedDeclaration": 5150,
                  "type": "library SafeCast"
                },
                "id": 5162,
                "name": "UserDefinedTypeName",
                "src": "441:8:26"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 5163,
                "name": "ElementaryTypeName",
                "src": "454:7:26"
              }
            ],
            "id": 5164,
            "name": "UsingForDirective",
            "src": "435:27:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromAmount0RoundingUp",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given a delta of token0\n @dev Always rounds up, because in the exact output case (increasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (decreasing price) we need to move the\n price less in order to not send too much output.\n The most precise formula for this is liquidity * sqrtPX96 / (liquidity +- amount * sqrtPX96),\n if this is impossible because of overflow, we calculate liquidity / (liquidity / sqrtPX96 +- amount).\n @param sqrtPX96 The starting price, i.e. before accounting for the token0 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token0 to add or remove from virtual reserves\n @param add Whether to add or remove the amount of token0\n @return The price after adding or removing amount, depending on add"
                },
                "id": 5165,
                "name": "StructuredDocumentation",
                "src": "468:932:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "scope": 5284,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5166,
                        "name": "ElementaryTypeName",
                        "src": "1461:7:26"
                      }
                    ],
                    "id": 5167,
                    "name": "VariableDeclaration",
                    "src": "1461:16:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5284,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 5168,
                        "name": "ElementaryTypeName",
                        "src": "1487:7:26"
                      }
                    ],
                    "id": 5169,
                    "name": "VariableDeclaration",
                    "src": "1487:17:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "scope": 5284,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5170,
                        "name": "ElementaryTypeName",
                        "src": "1514:7:26"
                      }
                    ],
                    "id": 5171,
                    "name": "VariableDeclaration",
                    "src": "1514:14:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "add",
                      "scope": 5284,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5172,
                        "name": "ElementaryTypeName",
                        "src": "1538:4:26"
                      }
                    ],
                    "id": 5173,
                    "name": "VariableDeclaration",
                    "src": "1538:8:26"
                  }
                ],
                "id": 5174,
                "name": "ParameterList",
                "src": "1451:101:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5284,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5175,
                        "name": "ElementaryTypeName",
                        "src": "1576:7:26"
                      }
                    ],
                    "id": 5176,
                    "name": "VariableDeclaration",
                    "src": "1576:7:26"
                  }
                ],
                "id": 5177,
                "name": "ParameterList",
                "src": "1575:9:26"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5171,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 5178,
                            "name": "Identifier",
                            "src": "1711:6:26"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 5179,
                            "name": "Literal",
                            "src": "1721:1:26"
                          }
                        ],
                        "id": 5180,
                        "name": "BinaryOperation",
                        "src": "1711:11:26"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 5177
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5167,
                              "type": "uint160",
                              "value": "sqrtPX96"
                            },
                            "id": 5181,
                            "name": "Identifier",
                            "src": "1731:8:26"
                          }
                        ],
                        "id": 5182,
                        "name": "Return",
                        "src": "1724:15:26"
                      }
                    ],
                    "id": 5183,
                    "name": "IfStatement",
                    "src": "1707:32:26"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5185
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numerator1",
                          "scope": 5283,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5184,
                            "name": "ElementaryTypeName",
                            "src": "1749:7:26"
                          }
                        ],
                        "id": 5185,
                        "name": "VariableDeclaration",
                        "src": "1749:18:26"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<<",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256"
                                    },
                                    "id": 5186,
                                    "name": "ElementaryTypeName",
                                    "src": "1770:7:26"
                                  }
                                ],
                                "id": 5187,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1770:7:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5169,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5188,
                                "name": "Identifier",
                                "src": "1778:9:26"
                              }
                            ],
                            "id": 5189,
                            "name": "FunctionCall",
                            "src": "1770:18:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "RESOLUTION",
                              "referencedDeclaration": 3813,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3817,
                                  "type": "type(library FixedPoint96)",
                                  "value": "FixedPoint96"
                                },
                                "id": 5190,
                                "name": "Identifier",
                                "src": "1792:12:26"
                              }
                            ],
                            "id": 5191,
                            "name": "MemberAccess",
                            "src": "1792:23:26"
                          }
                        ],
                        "id": 5192,
                        "name": "BinaryOperation",
                        "src": "1770:45:26"
                      }
                    ],
                    "id": 5193,
                    "name": "VariableDeclarationStatement",
                    "src": "1749:66:26"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5173,
                          "type": "bool",
                          "value": "add"
                        },
                        "id": 5194,
                        "name": "Identifier",
                        "src": "1830:3:26"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                5196
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "product",
                                  "scope": 5245,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 5195,
                                    "name": "ElementaryTypeName",
                                    "src": "1849:7:26"
                                  }
                                ],
                                "id": 5196,
                                "name": "VariableDeclaration",
                                "src": "1849:15:26"
                              }
                            ],
                            "id": 5197,
                            "name": "VariableDeclarationStatement",
                            "src": "1849:15:26"
                          },
                          {
                            "attributes": {},
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "/",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "=",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5196,
                                                  "type": "uint256",
                                                  "value": "product"
                                                },
                                                "id": 5198,
                                                "name": "Identifier",
                                                "src": "1883:7:26"
                                              },
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "*",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5171,
                                                      "type": "uint256",
                                                      "value": "amount"
                                                    },
                                                    "id": 5199,
                                                    "name": "Identifier",
                                                    "src": "1893:6:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5167,
                                                      "type": "uint160",
                                                      "value": "sqrtPX96"
                                                    },
                                                    "id": 5200,
                                                    "name": "Identifier",
                                                    "src": "1902:8:26"
                                                  }
                                                ],
                                                "id": 5201,
                                                "name": "BinaryOperation",
                                                "src": "1893:17:26"
                                              }
                                            ],
                                            "id": 5202,
                                            "name": "Assignment",
                                            "src": "1883:27:26"
                                          }
                                        ],
                                        "id": 5203,
                                        "name": "TupleExpression",
                                        "src": "1882:29:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5171,
                                          "type": "uint256",
                                          "value": "amount"
                                        },
                                        "id": 5204,
                                        "name": "Identifier",
                                        "src": "1914:6:26"
                                      }
                                    ],
                                    "id": 5205,
                                    "name": "BinaryOperation",
                                    "src": "1882:38:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5167,
                                      "type": "uint160",
                                      "value": "sqrtPX96"
                                    },
                                    "id": 5206,
                                    "name": "Identifier",
                                    "src": "1924:8:26"
                                  }
                                ],
                                "id": 5207,
                                "name": "BinaryOperation",
                                "src": "1882:50:26"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        5209
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "denominator",
                                          "scope": 5228,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint256",
                                              "type": "uint256"
                                            },
                                            "id": 5208,
                                            "name": "ElementaryTypeName",
                                            "src": "1952:7:26"
                                          }
                                        ],
                                        "id": 5209,
                                        "name": "VariableDeclaration",
                                        "src": "1952:19:26"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5185,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 5210,
                                            "name": "Identifier",
                                            "src": "1974:10:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5196,
                                              "type": "uint256",
                                              "value": "product"
                                            },
                                            "id": 5211,
                                            "name": "Identifier",
                                            "src": "1987:7:26"
                                          }
                                        ],
                                        "id": 5212,
                                        "name": "BinaryOperation",
                                        "src": "1974:20:26"
                                      }
                                    ],
                                    "id": 5213,
                                    "name": "VariableDeclarationStatement",
                                    "src": "1952:42:26"
                                  },
                                  {
                                    "attributes": {},
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": ">=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5209,
                                              "type": "uint256",
                                              "value": "denominator"
                                            },
                                            "id": 5214,
                                            "name": "Identifier",
                                            "src": "2016:11:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5185,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 5215,
                                            "name": "Identifier",
                                            "src": "2031:10:26"
                                          }
                                        ],
                                        "id": 5216,
                                        "name": "BinaryOperation",
                                        "src": "2016:25:26"
                                      },
                                      {
                                        "attributes": {
                                          "functionReturnParameters": 5177
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint160",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint160)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint160"
                                                    },
                                                    "id": 5217,
                                                    "name": "ElementaryTypeName",
                                                    "src": "2117:7:26"
                                                  }
                                                ],
                                                "id": 5218,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "2117:7:26"
                                              },
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "uint256",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint160",
                                                          "typeString": "uint160"
                                                        },
                                                        {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "mulDivRoundingUp",
                                                      "referencedDeclaration": 3989,
                                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 3990,
                                                          "type": "type(library FullMath)",
                                                          "value": "FullMath"
                                                        },
                                                        "id": 5219,
                                                        "name": "Identifier",
                                                        "src": "2125:8:26"
                                                      }
                                                    ],
                                                    "id": 5220,
                                                    "name": "MemberAccess",
                                                    "src": "2125:25:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5185,
                                                      "type": "uint256",
                                                      "value": "numerator1"
                                                    },
                                                    "id": 5221,
                                                    "name": "Identifier",
                                                    "src": "2151:10:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5167,
                                                      "type": "uint160",
                                                      "value": "sqrtPX96"
                                                    },
                                                    "id": 5222,
                                                    "name": "Identifier",
                                                    "src": "2163:8:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5209,
                                                      "type": "uint256",
                                                      "value": "denominator"
                                                    },
                                                    "id": 5223,
                                                    "name": "Identifier",
                                                    "src": "2173:11:26"
                                                  }
                                                ],
                                                "id": 5224,
                                                "name": "FunctionCall",
                                                "src": "2125:60:26"
                                              }
                                            ],
                                            "id": 5225,
                                            "name": "FunctionCall",
                                            "src": "2117:69:26"
                                          }
                                        ],
                                        "id": 5226,
                                        "name": "Return",
                                        "src": "2110:76:26"
                                      }
                                    ],
                                    "id": 5227,
                                    "name": "IfStatement",
                                    "src": "2012:174:26"
                                  }
                                ],
                                "id": 5228,
                                "name": "Block",
                                "src": "1934:267:26"
                              }
                            ],
                            "id": 5229,
                            "name": "IfStatement",
                            "src": "1878:323:26"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 5177
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint160"
                                        },
                                        "id": 5230,
                                        "name": "ElementaryTypeName",
                                        "src": "2222:7:26"
                                      }
                                    ],
                                    "id": 5231,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2222:7:26"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "divRoundingUp",
                                          "referencedDeclaration": 7236,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 7237,
                                              "type": "type(library UnsafeMath)",
                                              "value": "UnsafeMath"
                                            },
                                            "id": 5232,
                                            "name": "Identifier",
                                            "src": "2230:10:26"
                                          }
                                        ],
                                        "id": 5233,
                                        "name": "MemberAccess",
                                        "src": "2230:24:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5185,
                                          "type": "uint256",
                                          "value": "numerator1"
                                        },
                                        "id": 5234,
                                        "name": "Identifier",
                                        "src": "2255:10:26"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "add",
                                              "referencedDeclaration": 4067,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "/",
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 5185,
                                                          "type": "uint256",
                                                          "value": "numerator1"
                                                        },
                                                        "id": 5235,
                                                        "name": "Identifier",
                                                        "src": "2268:10:26"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 5167,
                                                          "type": "uint160",
                                                          "value": "sqrtPX96"
                                                        },
                                                        "id": 5236,
                                                        "name": "Identifier",
                                                        "src": "2281:8:26"
                                                      }
                                                    ],
                                                    "id": 5237,
                                                    "name": "BinaryOperation",
                                                    "src": "2268:21:26"
                                                  }
                                                ],
                                                "id": 5238,
                                                "name": "TupleExpression",
                                                "src": "2267:23:26"
                                              }
                                            ],
                                            "id": 5239,
                                            "name": "MemberAccess",
                                            "src": "2267:27:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5171,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 5240,
                                            "name": "Identifier",
                                            "src": "2295:6:26"
                                          }
                                        ],
                                        "id": 5241,
                                        "name": "FunctionCall",
                                        "src": "2267:35:26"
                                      }
                                    ],
                                    "id": 5242,
                                    "name": "FunctionCall",
                                    "src": "2230:73:26"
                                  }
                                ],
                                "id": 5243,
                                "name": "FunctionCall",
                                "src": "2222:82:26"
                              }
                            ],
                            "id": 5244,
                            "name": "Return",
                            "src": "2215:89:26"
                          }
                        ],
                        "id": 5245,
                        "name": "Block",
                        "src": "1835:480:26"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                5247
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "product",
                                  "scope": 5281,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 5246,
                                    "name": "ElementaryTypeName",
                                    "src": "2335:7:26"
                                  }
                                ],
                                "id": 5247,
                                "name": "VariableDeclaration",
                                "src": "2335:15:26"
                              }
                            ],
                            "id": 5248,
                            "name": "VariableDeclarationStatement",
                            "src": "2335:15:26"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        4294967278,
                                        4294967278
                                      ],
                                      "referencedDeclaration": 4294967278,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 5249,
                                    "name": "Identifier",
                                    "src": "2522:7:26"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "&&",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "/",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "=",
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 5247,
                                                          "type": "uint256",
                                                          "value": "product"
                                                        },
                                                        "id": 5250,
                                                        "name": "Identifier",
                                                        "src": "2531:7:26"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "commonType": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "operator": "*",
                                                          "type": "uint256"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 5171,
                                                              "type": "uint256",
                                                              "value": "amount"
                                                            },
                                                            "id": 5251,
                                                            "name": "Identifier",
                                                            "src": "2541:6:26"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 5167,
                                                              "type": "uint160",
                                                              "value": "sqrtPX96"
                                                            },
                                                            "id": 5252,
                                                            "name": "Identifier",
                                                            "src": "2550:8:26"
                                                          }
                                                        ],
                                                        "id": 5253,
                                                        "name": "BinaryOperation",
                                                        "src": "2541:17:26"
                                                      }
                                                    ],
                                                    "id": 5254,
                                                    "name": "Assignment",
                                                    "src": "2531:27:26"
                                                  }
                                                ],
                                                "id": 5255,
                                                "name": "TupleExpression",
                                                "src": "2530:29:26"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5171,
                                                  "type": "uint256",
                                                  "value": "amount"
                                                },
                                                "id": 5256,
                                                "name": "Identifier",
                                                "src": "2562:6:26"
                                              }
                                            ],
                                            "id": 5257,
                                            "name": "BinaryOperation",
                                            "src": "2530:38:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5167,
                                              "type": "uint160",
                                              "value": "sqrtPX96"
                                            },
                                            "id": 5258,
                                            "name": "Identifier",
                                            "src": "2572:8:26"
                                          }
                                        ],
                                        "id": 5259,
                                        "name": "BinaryOperation",
                                        "src": "2530:50:26"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": ">",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5185,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 5260,
                                            "name": "Identifier",
                                            "src": "2584:10:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5247,
                                              "type": "uint256",
                                              "value": "product"
                                            },
                                            "id": 5261,
                                            "name": "Identifier",
                                            "src": "2597:7:26"
                                          }
                                        ],
                                        "id": 5262,
                                        "name": "BinaryOperation",
                                        "src": "2584:20:26"
                                      }
                                    ],
                                    "id": 5263,
                                    "name": "BinaryOperation",
                                    "src": "2530:74:26"
                                  }
                                ],
                                "id": 5264,
                                "name": "FunctionCall",
                                "src": "2522:83:26"
                              }
                            ],
                            "id": 5265,
                            "name": "ExpressionStatement",
                            "src": "2522:83:26"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                5267
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "denominator",
                                  "scope": 5281,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 5266,
                                    "name": "ElementaryTypeName",
                                    "src": "2619:7:26"
                                  }
                                ],
                                "id": 5267,
                                "name": "VariableDeclaration",
                                "src": "2619:19:26"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5185,
                                      "type": "uint256",
                                      "value": "numerator1"
                                    },
                                    "id": 5268,
                                    "name": "Identifier",
                                    "src": "2641:10:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5247,
                                      "type": "uint256",
                                      "value": "product"
                                    },
                                    "id": 5269,
                                    "name": "Identifier",
                                    "src": "2654:7:26"
                                  }
                                ],
                                "id": 5270,
                                "name": "BinaryOperation",
                                "src": "2641:20:26"
                              }
                            ],
                            "id": 5271,
                            "name": "VariableDeclarationStatement",
                            "src": "2619:42:26"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 5177
                            },
                            "children": [
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toUint160",
                                      "referencedDeclaration": 5104,
                                      "type": "function (uint256) pure returns (uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mulDivRoundingUp",
                                              "referencedDeclaration": 3989,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3990,
                                                  "type": "type(library FullMath)",
                                                  "value": "FullMath"
                                                },
                                                "id": 5272,
                                                "name": "Identifier",
                                                "src": "2682:8:26"
                                              }
                                            ],
                                            "id": 5273,
                                            "name": "MemberAccess",
                                            "src": "2682:25:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5185,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 5274,
                                            "name": "Identifier",
                                            "src": "2708:10:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5167,
                                              "type": "uint160",
                                              "value": "sqrtPX96"
                                            },
                                            "id": 5275,
                                            "name": "Identifier",
                                            "src": "2720:8:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5267,
                                              "type": "uint256",
                                              "value": "denominator"
                                            },
                                            "id": 5276,
                                            "name": "Identifier",
                                            "src": "2730:11:26"
                                          }
                                        ],
                                        "id": 5277,
                                        "name": "FunctionCall",
                                        "src": "2682:60:26"
                                      }
                                    ],
                                    "id": 5278,
                                    "name": "MemberAccess",
                                    "src": "2682:70:26"
                                  }
                                ],
                                "id": 5279,
                                "name": "FunctionCall",
                                "src": "2682:72:26"
                              }
                            ],
                            "id": 5280,
                            "name": "Return",
                            "src": "2675:79:26"
                          }
                        ],
                        "id": 5281,
                        "name": "Block",
                        "src": "2321:444:26"
                      }
                    ],
                    "id": 5282,
                    "name": "IfStatement",
                    "src": "1826:939:26"
                  }
                ],
                "id": 5283,
                "name": "Block",
                "src": "1585:1186:26"
              }
            ],
            "id": 5284,
            "name": "FunctionDefinition",
            "src": "1405:1366:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromAmount1RoundingDown",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given a delta of token1\n @dev Always rounds down, because in the exact output case (decreasing price) we need to move the price at least\n far enough to get the desired output amount, and in the exact input case (increasing price) we need to move the\n price less in order to not send too much output.\n The formula we compute is within <1 wei of the lossless version: sqrtPX96 +- amount / liquidity\n @param sqrtPX96 The starting price, i.e., before accounting for the token1 delta\n @param liquidity The amount of usable liquidity\n @param amount How much of token1 to add, or remove, from virtual reserves\n @param add Whether to add, or remove, the amount of token1\n @return The price after adding or removing `amount`"
                },
                "id": 5285,
                "name": "StructuredDocumentation",
                "src": "2777:815:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "scope": 5379,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5286,
                        "name": "ElementaryTypeName",
                        "src": "3655:7:26"
                      }
                    ],
                    "id": 5287,
                    "name": "VariableDeclaration",
                    "src": "3655:16:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5379,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 5288,
                        "name": "ElementaryTypeName",
                        "src": "3681:7:26"
                      }
                    ],
                    "id": 5289,
                    "name": "VariableDeclaration",
                    "src": "3681:17:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "scope": 5379,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5290,
                        "name": "ElementaryTypeName",
                        "src": "3708:7:26"
                      }
                    ],
                    "id": 5291,
                    "name": "VariableDeclaration",
                    "src": "3708:14:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "add",
                      "scope": 5379,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5292,
                        "name": "ElementaryTypeName",
                        "src": "3732:4:26"
                      }
                    ],
                    "id": 5293,
                    "name": "VariableDeclaration",
                    "src": "3732:8:26"
                  }
                ],
                "id": 5294,
                "name": "ParameterList",
                "src": "3645:101:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5379,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5295,
                        "name": "ElementaryTypeName",
                        "src": "3770:7:26"
                      }
                    ],
                    "id": 5296,
                    "name": "VariableDeclaration",
                    "src": "3770:7:26"
                  }
                ],
                "id": 5297,
                "name": "ParameterList",
                "src": "3769:9:26"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5293,
                          "type": "bool",
                          "value": "add"
                        },
                        "id": 5298,
                        "name": "Identifier",
                        "src": "3947:3:26"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                5300
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "quotient",
                                  "scope": 5335,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 5299,
                                    "name": "ElementaryTypeName",
                                    "src": "3966:7:26"
                                  }
                                ],
                                "id": 5300,
                                "name": "VariableDeclaration",
                                "src": "3966:16:26"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "<=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5291,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 5301,
                                            "name": "Identifier",
                                            "src": "4023:6:26"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "max",
                                              "type": "uint160"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "type(uint160)",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_type$_t_uint160_$",
                                                          "typeString": "type(uint160)"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4294967269,
                                                      "type": "function () pure",
                                                      "value": "type"
                                                    },
                                                    "id": 5302,
                                                    "name": "Identifier",
                                                    "src": "4033:4:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint160)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint160"
                                                        },
                                                        "id": 5303,
                                                        "name": "ElementaryTypeName",
                                                        "src": "4038:7:26"
                                                      }
                                                    ],
                                                    "id": 5304,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "4038:7:26"
                                                  }
                                                ],
                                                "id": 5305,
                                                "name": "FunctionCall",
                                                "src": "4033:13:26"
                                              }
                                            ],
                                            "id": 5306,
                                            "name": "MemberAccess",
                                            "src": "4033:17:26"
                                          }
                                        ],
                                        "id": 5307,
                                        "name": "BinaryOperation",
                                        "src": "4023:27:26"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "/",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "<<",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5291,
                                                      "type": "uint256",
                                                      "value": "amount"
                                                    },
                                                    "id": 5308,
                                                    "name": "Identifier",
                                                    "src": "4078:6:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "RESOLUTION",
                                                      "referencedDeclaration": 3813,
                                                      "type": "uint8"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 3817,
                                                          "type": "type(library FixedPoint96)",
                                                          "value": "FixedPoint96"
                                                        },
                                                        "id": 5309,
                                                        "name": "Identifier",
                                                        "src": "4088:12:26"
                                                      }
                                                    ],
                                                    "id": 5310,
                                                    "name": "MemberAccess",
                                                    "src": "4088:23:26"
                                                  }
                                                ],
                                                "id": 5311,
                                                "name": "BinaryOperation",
                                                "src": "4078:33:26"
                                              }
                                            ],
                                            "id": 5312,
                                            "name": "TupleExpression",
                                            "src": "4077:35:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5289,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 5313,
                                            "name": "Identifier",
                                            "src": "4115:9:26"
                                          }
                                        ],
                                        "id": 5314,
                                        "name": "BinaryOperation",
                                        "src": "4077:47:26"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mulDiv",
                                              "referencedDeclaration": 3946,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3990,
                                                  "type": "type(library FullMath)",
                                                  "value": "FullMath"
                                                },
                                                "id": 5315,
                                                "name": "Identifier",
                                                "src": "4151:8:26"
                                              }
                                            ],
                                            "id": 5316,
                                            "name": "MemberAccess",
                                            "src": "4151:15:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5291,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 5317,
                                            "name": "Identifier",
                                            "src": "4167:6:26"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "Q96",
                                              "referencedDeclaration": 3816,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3817,
                                                  "type": "type(library FixedPoint96)",
                                                  "value": "FixedPoint96"
                                                },
                                                "id": 5318,
                                                "name": "Identifier",
                                                "src": "4175:12:26"
                                              }
                                            ],
                                            "id": 5319,
                                            "name": "MemberAccess",
                                            "src": "4175:16:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5289,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 5320,
                                            "name": "Identifier",
                                            "src": "4193:9:26"
                                          }
                                        ],
                                        "id": 5321,
                                        "name": "FunctionCall",
                                        "src": "4151:52:26"
                                      }
                                    ],
                                    "id": 5322,
                                    "name": "Conditional",
                                    "src": "4023:180:26"
                                  }
                                ],
                                "id": 5323,
                                "name": "TupleExpression",
                                "src": "4001:220:26"
                              }
                            ],
                            "id": 5324,
                            "name": "VariableDeclarationStatement",
                            "src": "3966:255:26"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 5297
                            },
                            "children": [
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toUint160",
                                      "referencedDeclaration": 5104,
                                      "type": "function (uint256) pure returns (uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "add",
                                              "referencedDeclaration": 4067,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "uint256",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint160",
                                                          "typeString": "uint160"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint256"
                                                        },
                                                        "id": 5325,
                                                        "name": "ElementaryTypeName",
                                                        "src": "4243:7:26"
                                                      }
                                                    ],
                                                    "id": 5326,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "4243:7:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5287,
                                                      "type": "uint160",
                                                      "value": "sqrtPX96"
                                                    },
                                                    "id": 5327,
                                                    "name": "Identifier",
                                                    "src": "4251:8:26"
                                                  }
                                                ],
                                                "id": 5328,
                                                "name": "FunctionCall",
                                                "src": "4243:17:26"
                                              }
                                            ],
                                            "id": 5329,
                                            "name": "MemberAccess",
                                            "src": "4243:21:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5300,
                                              "type": "uint256",
                                              "value": "quotient"
                                            },
                                            "id": 5330,
                                            "name": "Identifier",
                                            "src": "4265:8:26"
                                          }
                                        ],
                                        "id": 5331,
                                        "name": "FunctionCall",
                                        "src": "4243:31:26"
                                      }
                                    ],
                                    "id": 5332,
                                    "name": "MemberAccess",
                                    "src": "4243:41:26"
                                  }
                                ],
                                "id": 5333,
                                "name": "FunctionCall",
                                "src": "4243:43:26"
                              }
                            ],
                            "id": 5334,
                            "name": "Return",
                            "src": "4236:50:26"
                          }
                        ],
                        "id": 5335,
                        "name": "Block",
                        "src": "3952:345:26"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                5337
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "quotient",
                                  "scope": 5376,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 5336,
                                    "name": "ElementaryTypeName",
                                    "src": "4317:7:26"
                                  }
                                ],
                                "id": 5337,
                                "name": "VariableDeclaration",
                                "src": "4317:16:26"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "<=",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5291,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 5338,
                                            "name": "Identifier",
                                            "src": "4374:6:26"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "member_name": "max",
                                              "type": "uint160"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "type(uint160)",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_type$_t_uint160_$",
                                                          "typeString": "type(uint160)"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4294967269,
                                                      "type": "function () pure",
                                                      "value": "type"
                                                    },
                                                    "id": 5339,
                                                    "name": "Identifier",
                                                    "src": "4384:4:26"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint160)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint160"
                                                        },
                                                        "id": 5340,
                                                        "name": "ElementaryTypeName",
                                                        "src": "4389:7:26"
                                                      }
                                                    ],
                                                    "id": 5341,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "4389:7:26"
                                                  }
                                                ],
                                                "id": 5342,
                                                "name": "FunctionCall",
                                                "src": "4384:13:26"
                                              }
                                            ],
                                            "id": 5343,
                                            "name": "MemberAccess",
                                            "src": "4384:17:26"
                                          }
                                        ],
                                        "id": 5344,
                                        "name": "BinaryOperation",
                                        "src": "4374:27:26"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "divRoundingUp",
                                              "referencedDeclaration": 7236,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 7237,
                                                  "type": "type(library UnsafeMath)",
                                                  "value": "UnsafeMath"
                                                },
                                                "id": 5345,
                                                "name": "Identifier",
                                                "src": "4428:10:26"
                                              }
                                            ],
                                            "id": 5346,
                                            "name": "MemberAccess",
                                            "src": "4428:24:26"
                                          },
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "<<",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5291,
                                                  "type": "uint256",
                                                  "value": "amount"
                                                },
                                                "id": 5347,
                                                "name": "Identifier",
                                                "src": "4453:6:26"
                                              },
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "RESOLUTION",
                                                  "referencedDeclaration": 3813,
                                                  "type": "uint8"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3817,
                                                      "type": "type(library FixedPoint96)",
                                                      "value": "FixedPoint96"
                                                    },
                                                    "id": 5348,
                                                    "name": "Identifier",
                                                    "src": "4463:12:26"
                                                  }
                                                ],
                                                "id": 5349,
                                                "name": "MemberAccess",
                                                "src": "4463:23:26"
                                              }
                                            ],
                                            "id": 5350,
                                            "name": "BinaryOperation",
                                            "src": "4453:33:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5289,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 5351,
                                            "name": "Identifier",
                                            "src": "4488:9:26"
                                          }
                                        ],
                                        "id": 5352,
                                        "name": "FunctionCall",
                                        "src": "4428:70:26"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mulDivRoundingUp",
                                              "referencedDeclaration": 3989,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3990,
                                                  "type": "type(library FullMath)",
                                                  "value": "FullMath"
                                                },
                                                "id": 5353,
                                                "name": "Identifier",
                                                "src": "4525:8:26"
                                              }
                                            ],
                                            "id": 5354,
                                            "name": "MemberAccess",
                                            "src": "4525:25:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5291,
                                              "type": "uint256",
                                              "value": "amount"
                                            },
                                            "id": 5355,
                                            "name": "Identifier",
                                            "src": "4551:6:26"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "Q96",
                                              "referencedDeclaration": 3816,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3817,
                                                  "type": "type(library FixedPoint96)",
                                                  "value": "FixedPoint96"
                                                },
                                                "id": 5356,
                                                "name": "Identifier",
                                                "src": "4559:12:26"
                                              }
                                            ],
                                            "id": 5357,
                                            "name": "MemberAccess",
                                            "src": "4559:16:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5289,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 5358,
                                            "name": "Identifier",
                                            "src": "4577:9:26"
                                          }
                                        ],
                                        "id": 5359,
                                        "name": "FunctionCall",
                                        "src": "4525:62:26"
                                      }
                                    ],
                                    "id": 5360,
                                    "name": "Conditional",
                                    "src": "4374:213:26"
                                  }
                                ],
                                "id": 5361,
                                "name": "TupleExpression",
                                "src": "4352:253:26"
                              }
                            ],
                            "id": 5362,
                            "name": "VariableDeclarationStatement",
                            "src": "4317:288:26"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        4294967278,
                                        4294967278
                                      ],
                                      "referencedDeclaration": 4294967278,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 5363,
                                    "name": "Identifier",
                                    "src": "4620:7:26"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": ">",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5287,
                                          "type": "uint160",
                                          "value": "sqrtPX96"
                                        },
                                        "id": 5364,
                                        "name": "Identifier",
                                        "src": "4628:8:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5337,
                                          "type": "uint256",
                                          "value": "quotient"
                                        },
                                        "id": 5365,
                                        "name": "Identifier",
                                        "src": "4639:8:26"
                                      }
                                    ],
                                    "id": 5366,
                                    "name": "BinaryOperation",
                                    "src": "4628:19:26"
                                  }
                                ],
                                "id": 5367,
                                "name": "FunctionCall",
                                "src": "4620:28:26"
                              }
                            ],
                            "id": 5368,
                            "name": "ExpressionStatement",
                            "src": "4620:28:26"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 5297
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint160",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint160"
                                        },
                                        "id": 5369,
                                        "name": "ElementaryTypeName",
                                        "src": "4705:7:26"
                                      }
                                    ],
                                    "id": 5370,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4705:7:26"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5287,
                                          "type": "uint160",
                                          "value": "sqrtPX96"
                                        },
                                        "id": 5371,
                                        "name": "Identifier",
                                        "src": "4713:8:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5337,
                                          "type": "uint256",
                                          "value": "quotient"
                                        },
                                        "id": 5372,
                                        "name": "Identifier",
                                        "src": "4724:8:26"
                                      }
                                    ],
                                    "id": 5373,
                                    "name": "BinaryOperation",
                                    "src": "4713:19:26"
                                  }
                                ],
                                "id": 5374,
                                "name": "FunctionCall",
                                "src": "4705:28:26"
                              }
                            ],
                            "id": 5375,
                            "name": "Return",
                            "src": "4698:35:26"
                          }
                        ],
                        "id": 5376,
                        "name": "Block",
                        "src": "4303:441:26"
                      }
                    ],
                    "id": 5377,
                    "name": "IfStatement",
                    "src": "3943:801:26"
                  }
                ],
                "id": 5378,
                "name": "Block",
                "src": "3779:971:26"
              }
            ],
            "id": 5379,
            "name": "FunctionDefinition",
            "src": "3597:1153:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromInput",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given an input amount of token0 or token1\n @dev Throws if price or liquidity are 0, or if the next price is out of bounds\n @param sqrtPX96 The starting price, i.e., before accounting for the input amount\n @param liquidity The amount of usable liquidity\n @param amountIn How much of token0, or token1, is being swapped in\n @param zeroForOne Whether the amount in is token0 or token1\n @return sqrtQX96 The price after adding the input amount to token0 or token1"
                },
                "id": 5380,
                "name": "StructuredDocumentation",
                "src": "4756:538:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "scope": 5421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5381,
                        "name": "ElementaryTypeName",
                        "src": "5343:7:26"
                      }
                    ],
                    "id": 5382,
                    "name": "VariableDeclaration",
                    "src": "5343:16:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 5383,
                        "name": "ElementaryTypeName",
                        "src": "5369:7:26"
                      }
                    ],
                    "id": 5384,
                    "name": "VariableDeclaration",
                    "src": "5369:17:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "scope": 5421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5385,
                        "name": "ElementaryTypeName",
                        "src": "5396:7:26"
                      }
                    ],
                    "id": 5386,
                    "name": "VariableDeclaration",
                    "src": "5396:16:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "zeroForOne",
                      "scope": 5421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5387,
                        "name": "ElementaryTypeName",
                        "src": "5422:4:26"
                      }
                    ],
                    "id": 5388,
                    "name": "VariableDeclaration",
                    "src": "5422:15:26"
                  }
                ],
                "id": 5389,
                "name": "ParameterList",
                "src": "5333:110:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtQX96",
                      "scope": 5421,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5390,
                        "name": "ElementaryTypeName",
                        "src": "5467:7:26"
                      }
                    ],
                    "id": 5391,
                    "name": "VariableDeclaration",
                    "src": "5467:16:26"
                  }
                ],
                "id": 5392,
                "name": "ParameterList",
                "src": "5466:18:26"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 5393,
                            "name": "Identifier",
                            "src": "5495:7:26"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5382,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 5394,
                                "name": "Identifier",
                                "src": "5503:8:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5395,
                                "name": "Literal",
                                "src": "5514:1:26"
                              }
                            ],
                            "id": 5396,
                            "name": "BinaryOperation",
                            "src": "5503:12:26"
                          }
                        ],
                        "id": 5397,
                        "name": "FunctionCall",
                        "src": "5495:21:26"
                      }
                    ],
                    "id": 5398,
                    "name": "ExpressionStatement",
                    "src": "5495:21:26"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 5399,
                            "name": "Identifier",
                            "src": "5526:7:26"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5384,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5400,
                                "name": "Identifier",
                                "src": "5534:9:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5401,
                                "name": "Literal",
                                "src": "5546:1:26"
                              }
                            ],
                            "id": 5402,
                            "name": "BinaryOperation",
                            "src": "5534:13:26"
                          }
                        ],
                        "id": 5403,
                        "name": "FunctionCall",
                        "src": "5526:22:26"
                      }
                    ],
                    "id": 5404,
                    "name": "ExpressionStatement",
                    "src": "5526:22:26"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5392
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint160"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5388,
                              "type": "bool",
                              "value": "zeroForOne"
                            },
                            "id": 5405,
                            "name": "Identifier",
                            "src": "5644:10:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5284,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount0RoundingUp"
                                },
                                "id": 5406,
                                "name": "Identifier",
                                "src": "5673:37:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5382,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 5407,
                                "name": "Identifier",
                                "src": "5711:8:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5384,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5408,
                                "name": "Identifier",
                                "src": "5721:9:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5386,
                                  "type": "uint256",
                                  "value": "amountIn"
                                },
                                "id": 5409,
                                "name": "Identifier",
                                "src": "5732:8:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 5410,
                                "name": "Literal",
                                "src": "5742:4:26"
                              }
                            ],
                            "id": 5411,
                            "name": "FunctionCall",
                            "src": "5673:74:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5379,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount1RoundingDown"
                                },
                                "id": 5412,
                                "name": "Identifier",
                                "src": "5766:39:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5382,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 5413,
                                "name": "Identifier",
                                "src": "5806:8:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5384,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5414,
                                "name": "Identifier",
                                "src": "5816:9:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5386,
                                  "type": "uint256",
                                  "value": "amountIn"
                                },
                                "id": 5415,
                                "name": "Identifier",
                                "src": "5827:8:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 5416,
                                "name": "Literal",
                                "src": "5837:4:26"
                              }
                            ],
                            "id": 5417,
                            "name": "FunctionCall",
                            "src": "5766:76:26"
                          }
                        ],
                        "id": 5418,
                        "name": "Conditional",
                        "src": "5644:198:26"
                      }
                    ],
                    "id": 5419,
                    "name": "Return",
                    "src": "5625:217:26"
                  }
                ],
                "id": 5420,
                "name": "Block",
                "src": "5485:364:26"
              }
            ],
            "id": 5421,
            "name": "FunctionDefinition",
            "src": "5299:550:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getNextSqrtPriceFromOutput",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the next sqrt price given an output amount of token0 or token1\n @dev Throws if price or liquidity are 0 or the next price is out of bounds\n @param sqrtPX96 The starting price before accounting for the output amount\n @param liquidity The amount of usable liquidity\n @param amountOut How much of token0, or token1, is being swapped out\n @param zeroForOne Whether the amount out is token0 or token1\n @return sqrtQX96 The price after removing the output amount of token0 or token1"
                },
                "id": 5422,
                "name": "StructuredDocumentation",
                "src": "5855:535:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtPX96",
                      "scope": 5463,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5423,
                        "name": "ElementaryTypeName",
                        "src": "6440:7:26"
                      }
                    ],
                    "id": 5424,
                    "name": "VariableDeclaration",
                    "src": "6440:16:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5463,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 5425,
                        "name": "ElementaryTypeName",
                        "src": "6466:7:26"
                      }
                    ],
                    "id": 5426,
                    "name": "VariableDeclaration",
                    "src": "6466:17:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountOut",
                      "scope": 5463,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5427,
                        "name": "ElementaryTypeName",
                        "src": "6493:7:26"
                      }
                    ],
                    "id": 5428,
                    "name": "VariableDeclaration",
                    "src": "6493:17:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "zeroForOne",
                      "scope": 5463,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5429,
                        "name": "ElementaryTypeName",
                        "src": "6520:4:26"
                      }
                    ],
                    "id": 5430,
                    "name": "VariableDeclaration",
                    "src": "6520:15:26"
                  }
                ],
                "id": 5431,
                "name": "ParameterList",
                "src": "6430:111:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtQX96",
                      "scope": 5463,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5432,
                        "name": "ElementaryTypeName",
                        "src": "6565:7:26"
                      }
                    ],
                    "id": 5433,
                    "name": "VariableDeclaration",
                    "src": "6565:16:26"
                  }
                ],
                "id": 5434,
                "name": "ParameterList",
                "src": "6564:18:26"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 5435,
                            "name": "Identifier",
                            "src": "6593:7:26"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5424,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 5436,
                                "name": "Identifier",
                                "src": "6601:8:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5437,
                                "name": "Literal",
                                "src": "6612:1:26"
                              }
                            ],
                            "id": 5438,
                            "name": "BinaryOperation",
                            "src": "6601:12:26"
                          }
                        ],
                        "id": 5439,
                        "name": "FunctionCall",
                        "src": "6593:21:26"
                      }
                    ],
                    "id": 5440,
                    "name": "ExpressionStatement",
                    "src": "6593:21:26"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 5441,
                            "name": "Identifier",
                            "src": "6624:7:26"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5426,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5442,
                                "name": "Identifier",
                                "src": "6632:9:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5443,
                                "name": "Literal",
                                "src": "6644:1:26"
                              }
                            ],
                            "id": 5444,
                            "name": "BinaryOperation",
                            "src": "6632:13:26"
                          }
                        ],
                        "id": 5445,
                        "name": "FunctionCall",
                        "src": "6624:22:26"
                      }
                    ],
                    "id": 5446,
                    "name": "ExpressionStatement",
                    "src": "6624:22:26"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5434
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint160"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5430,
                              "type": "bool",
                              "value": "zeroForOne"
                            },
                            "id": 5447,
                            "name": "Identifier",
                            "src": "6736:10:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5379,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount1RoundingDown"
                                },
                                "id": 5448,
                                "name": "Identifier",
                                "src": "6765:39:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5424,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 5449,
                                "name": "Identifier",
                                "src": "6805:8:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5426,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5450,
                                "name": "Identifier",
                                "src": "6815:9:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5428,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 5451,
                                "name": "Identifier",
                                "src": "6826:9:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 5452,
                                "name": "Literal",
                                "src": "6837:5:26"
                              }
                            ],
                            "id": 5453,
                            "name": "FunctionCall",
                            "src": "6765:78:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5284,
                                  "type": "function (uint160,uint128,uint256,bool) pure returns (uint160)",
                                  "value": "getNextSqrtPriceFromAmount0RoundingUp"
                                },
                                "id": 5454,
                                "name": "Identifier",
                                "src": "6862:37:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5424,
                                  "type": "uint160",
                                  "value": "sqrtPX96"
                                },
                                "id": 5455,
                                "name": "Identifier",
                                "src": "6900:8:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5426,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5456,
                                "name": "Identifier",
                                "src": "6910:9:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5428,
                                  "type": "uint256",
                                  "value": "amountOut"
                                },
                                "id": 5457,
                                "name": "Identifier",
                                "src": "6921:9:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 5458,
                                "name": "Literal",
                                "src": "6932:5:26"
                              }
                            ],
                            "id": 5459,
                            "name": "FunctionCall",
                            "src": "6862:76:26"
                          }
                        ],
                        "id": 5460,
                        "name": "Conditional",
                        "src": "6736:202:26"
                      }
                    ],
                    "id": 5461,
                    "name": "Return",
                    "src": "6717:221:26"
                  }
                ],
                "id": 5462,
                "name": "Block",
                "src": "6583:362:26"
              }
            ],
            "id": 5463,
            "name": "FunctionDefinition",
            "src": "6395:550:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount0Delta",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the amount0 delta between two prices\n @dev Calculates liquidity / sqrt(lower) - liquidity / sqrt(upper),\n i.e. liquidity * (sqrt(upper) - sqrt(lower)) / (sqrt(upper) * sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up or down\n @return amount0 Amount of token0 required to cover a position of size liquidity between the two passed prices"
                },
                "id": 5464,
                "name": "StructuredDocumentation",
                "src": "6951:537:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "scope": 5533,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5465,
                        "name": "ElementaryTypeName",
                        "src": "7527:7:26"
                      }
                    ],
                    "id": 5466,
                    "name": "VariableDeclaration",
                    "src": "7527:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "scope": 5533,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5467,
                        "name": "ElementaryTypeName",
                        "src": "7558:7:26"
                      }
                    ],
                    "id": 5468,
                    "name": "VariableDeclaration",
                    "src": "7558:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5533,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 5469,
                        "name": "ElementaryTypeName",
                        "src": "7589:7:26"
                      }
                    ],
                    "id": 5470,
                    "name": "VariableDeclaration",
                    "src": "7589:17:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "roundUp",
                      "scope": 5533,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5471,
                        "name": "ElementaryTypeName",
                        "src": "7616:4:26"
                      }
                    ],
                    "id": 5472,
                    "name": "VariableDeclaration",
                    "src": "7616:12:26"
                  }
                ],
                "id": 5473,
                "name": "ParameterList",
                "src": "7517:117:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount0",
                      "scope": 5533,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5474,
                        "name": "ElementaryTypeName",
                        "src": "7658:7:26"
                      }
                    ],
                    "id": 5475,
                    "name": "VariableDeclaration",
                    "src": "7658:15:26"
                  }
                ],
                "id": 5476,
                "name": "ParameterList",
                "src": "7657:17:26"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5466,
                              "type": "uint160",
                              "value": "sqrtRatioAX96"
                            },
                            "id": 5477,
                            "name": "Identifier",
                            "src": "7689:13:26"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5468,
                              "type": "uint160",
                              "value": "sqrtRatioBX96"
                            },
                            "id": 5478,
                            "name": "Identifier",
                            "src": "7705:13:26"
                          }
                        ],
                        "id": 5479,
                        "name": "BinaryOperation",
                        "src": "7689:29:26"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "tuple()"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5466,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 5480,
                                    "name": "Identifier",
                                    "src": "7721:13:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5468,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5481,
                                    "name": "Identifier",
                                    "src": "7736:13:26"
                                  }
                                ],
                                "id": 5482,
                                "name": "TupleExpression",
                                "src": "7720:30:26"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5468,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5483,
                                    "name": "Identifier",
                                    "src": "7754:13:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5466,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 5484,
                                    "name": "Identifier",
                                    "src": "7769:13:26"
                                  }
                                ],
                                "id": 5485,
                                "name": "TupleExpression",
                                "src": "7753:30:26"
                              }
                            ],
                            "id": 5486,
                            "name": "Assignment",
                            "src": "7720:63:26"
                          }
                        ],
                        "id": 5487,
                        "name": "ExpressionStatement",
                        "src": "7720:63:26"
                      }
                    ],
                    "id": 5488,
                    "name": "IfStatement",
                    "src": "7685:98:26"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5490
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numerator1",
                          "scope": 5532,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5489,
                            "name": "ElementaryTypeName",
                            "src": "7794:7:26"
                          }
                        ],
                        "id": 5490,
                        "name": "VariableDeclaration",
                        "src": "7794:18:26"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<<",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256"
                                    },
                                    "id": 5491,
                                    "name": "ElementaryTypeName",
                                    "src": "7815:7:26"
                                  }
                                ],
                                "id": 5492,
                                "name": "ElementaryTypeNameExpression",
                                "src": "7815:7:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5470,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5493,
                                "name": "Identifier",
                                "src": "7823:9:26"
                              }
                            ],
                            "id": 5494,
                            "name": "FunctionCall",
                            "src": "7815:18:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "RESOLUTION",
                              "referencedDeclaration": 3813,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3817,
                                  "type": "type(library FixedPoint96)",
                                  "value": "FixedPoint96"
                                },
                                "id": 5495,
                                "name": "Identifier",
                                "src": "7837:12:26"
                              }
                            ],
                            "id": 5496,
                            "name": "MemberAccess",
                            "src": "7837:23:26"
                          }
                        ],
                        "id": 5497,
                        "name": "BinaryOperation",
                        "src": "7815:45:26"
                      }
                    ],
                    "id": 5498,
                    "name": "VariableDeclarationStatement",
                    "src": "7794:66:26"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5500
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "numerator2",
                          "scope": 5532,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5499,
                            "name": "ElementaryTypeName",
                            "src": "7870:7:26"
                          }
                        ],
                        "id": 5500,
                        "name": "VariableDeclaration",
                        "src": "7870:18:26"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "uint160"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5468,
                              "type": "uint160",
                              "value": "sqrtRatioBX96"
                            },
                            "id": 5501,
                            "name": "Identifier",
                            "src": "7891:13:26"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5466,
                              "type": "uint160",
                              "value": "sqrtRatioAX96"
                            },
                            "id": 5502,
                            "name": "Identifier",
                            "src": "7907:13:26"
                          }
                        ],
                        "id": 5503,
                        "name": "BinaryOperation",
                        "src": "7891:29:26"
                      }
                    ],
                    "id": 5504,
                    "name": "VariableDeclarationStatement",
                    "src": "7870:50:26"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 5505,
                            "name": "Identifier",
                            "src": "7931:7:26"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5466,
                                  "type": "uint160",
                                  "value": "sqrtRatioAX96"
                                },
                                "id": 5506,
                                "name": "Identifier",
                                "src": "7939:13:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5507,
                                "name": "Literal",
                                "src": "7955:1:26"
                              }
                            ],
                            "id": 5508,
                            "name": "BinaryOperation",
                            "src": "7939:17:26"
                          }
                        ],
                        "id": 5509,
                        "name": "FunctionCall",
                        "src": "7931:26:26"
                      }
                    ],
                    "id": 5510,
                    "name": "ExpressionStatement",
                    "src": "7931:26:26"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5476
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5472,
                              "type": "bool",
                              "value": "roundUp"
                            },
                            "id": 5511,
                            "name": "Identifier",
                            "src": "7987:7:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "divRoundingUp",
                                  "referencedDeclaration": 7236,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7237,
                                      "type": "type(library UnsafeMath)",
                                      "value": "UnsafeMath"
                                    },
                                    "id": 5512,
                                    "name": "Identifier",
                                    "src": "8013:10:26"
                                  }
                                ],
                                "id": 5513,
                                "name": "MemberAccess",
                                "src": "8013:24:26"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mulDivRoundingUp",
                                      "referencedDeclaration": 3989,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3990,
                                          "type": "type(library FullMath)",
                                          "value": "FullMath"
                                        },
                                        "id": 5514,
                                        "name": "Identifier",
                                        "src": "8059:8:26"
                                      }
                                    ],
                                    "id": 5515,
                                    "name": "MemberAccess",
                                    "src": "8059:25:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5490,
                                      "type": "uint256",
                                      "value": "numerator1"
                                    },
                                    "id": 5516,
                                    "name": "Identifier",
                                    "src": "8085:10:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5500,
                                      "type": "uint256",
                                      "value": "numerator2"
                                    },
                                    "id": 5517,
                                    "name": "Identifier",
                                    "src": "8097:10:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5468,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5518,
                                    "name": "Identifier",
                                    "src": "8109:13:26"
                                  }
                                ],
                                "id": 5519,
                                "name": "FunctionCall",
                                "src": "8059:64:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5466,
                                  "type": "uint160",
                                  "value": "sqrtRatioAX96"
                                },
                                "id": 5520,
                                "name": "Identifier",
                                "src": "8145:13:26"
                              }
                            ],
                            "id": 5521,
                            "name": "FunctionCall",
                            "src": "8013:163:26"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mulDiv",
                                      "referencedDeclaration": 3946,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3990,
                                          "type": "type(library FullMath)",
                                          "value": "FullMath"
                                        },
                                        "id": 5522,
                                        "name": "Identifier",
                                        "src": "8195:8:26"
                                      }
                                    ],
                                    "id": 5523,
                                    "name": "MemberAccess",
                                    "src": "8195:15:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5490,
                                      "type": "uint256",
                                      "value": "numerator1"
                                    },
                                    "id": 5524,
                                    "name": "Identifier",
                                    "src": "8211:10:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5500,
                                      "type": "uint256",
                                      "value": "numerator2"
                                    },
                                    "id": 5525,
                                    "name": "Identifier",
                                    "src": "8223:10:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5468,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5526,
                                    "name": "Identifier",
                                    "src": "8235:13:26"
                                  }
                                ],
                                "id": 5527,
                                "name": "FunctionCall",
                                "src": "8195:54:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5466,
                                  "type": "uint160",
                                  "value": "sqrtRatioAX96"
                                },
                                "id": 5528,
                                "name": "Identifier",
                                "src": "8252:13:26"
                              }
                            ],
                            "id": 5529,
                            "name": "BinaryOperation",
                            "src": "8195:70:26"
                          }
                        ],
                        "id": 5530,
                        "name": "Conditional",
                        "src": "7987:278:26"
                      }
                    ],
                    "id": 5531,
                    "name": "Return",
                    "src": "7968:297:26"
                  }
                ],
                "id": 5532,
                "name": "Block",
                "src": "7675:597:26"
              }
            ],
            "id": 5533,
            "name": "FunctionDefinition",
            "src": "7493:779:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount1Delta",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Gets the amount1 delta between two prices\n @dev Calculates liquidity * (sqrt(upper) - sqrt(lower))\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The amount of usable liquidity\n @param roundUp Whether to round the amount up, or down\n @return amount1 Amount of token1 required to cover a position of size liquidity between the two passed prices"
                },
                "id": 5534,
                "name": "StructuredDocumentation",
                "src": "8278:444:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "scope": 5581,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5535,
                        "name": "ElementaryTypeName",
                        "src": "8761:7:26"
                      }
                    ],
                    "id": 5536,
                    "name": "VariableDeclaration",
                    "src": "8761:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "scope": 5581,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5537,
                        "name": "ElementaryTypeName",
                        "src": "8792:7:26"
                      }
                    ],
                    "id": 5538,
                    "name": "VariableDeclaration",
                    "src": "8792:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5581,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 5539,
                        "name": "ElementaryTypeName",
                        "src": "8823:7:26"
                      }
                    ],
                    "id": 5540,
                    "name": "VariableDeclaration",
                    "src": "8823:17:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "roundUp",
                      "scope": 5581,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5541,
                        "name": "ElementaryTypeName",
                        "src": "8850:4:26"
                      }
                    ],
                    "id": 5542,
                    "name": "VariableDeclaration",
                    "src": "8850:12:26"
                  }
                ],
                "id": 5543,
                "name": "ParameterList",
                "src": "8751:117:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount1",
                      "scope": 5581,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5544,
                        "name": "ElementaryTypeName",
                        "src": "8892:7:26"
                      }
                    ],
                    "id": 5545,
                    "name": "VariableDeclaration",
                    "src": "8892:15:26"
                  }
                ],
                "id": 5546,
                "name": "ParameterList",
                "src": "8891:17:26"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5536,
                              "type": "uint160",
                              "value": "sqrtRatioAX96"
                            },
                            "id": 5547,
                            "name": "Identifier",
                            "src": "8923:13:26"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5538,
                              "type": "uint160",
                              "value": "sqrtRatioBX96"
                            },
                            "id": 5548,
                            "name": "Identifier",
                            "src": "8939:13:26"
                          }
                        ],
                        "id": 5549,
                        "name": "BinaryOperation",
                        "src": "8923:29:26"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "tuple()"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5536,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 5550,
                                    "name": "Identifier",
                                    "src": "8955:13:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5538,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5551,
                                    "name": "Identifier",
                                    "src": "8970:13:26"
                                  }
                                ],
                                "id": 5552,
                                "name": "TupleExpression",
                                "src": "8954:30:26"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint160,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5538,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5553,
                                    "name": "Identifier",
                                    "src": "8988:13:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5536,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 5554,
                                    "name": "Identifier",
                                    "src": "9003:13:26"
                                  }
                                ],
                                "id": 5555,
                                "name": "TupleExpression",
                                "src": "8987:30:26"
                              }
                            ],
                            "id": 5556,
                            "name": "Assignment",
                            "src": "8954:63:26"
                          }
                        ],
                        "id": 5557,
                        "name": "ExpressionStatement",
                        "src": "8954:63:26"
                      }
                    ],
                    "id": 5558,
                    "name": "IfStatement",
                    "src": "8919:98:26"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5546
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5542,
                              "type": "bool",
                              "value": "roundUp"
                            },
                            "id": 5559,
                            "name": "Identifier",
                            "src": "9047:7:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mulDivRoundingUp",
                                  "referencedDeclaration": 3989,
                                  "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3990,
                                      "type": "type(library FullMath)",
                                      "value": "FullMath"
                                    },
                                    "id": 5560,
                                    "name": "Identifier",
                                    "src": "9073:8:26"
                                  }
                                ],
                                "id": 5561,
                                "name": "MemberAccess",
                                "src": "9073:25:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5540,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5562,
                                "name": "Identifier",
                                "src": "9099:9:26"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5538,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5563,
                                    "name": "Identifier",
                                    "src": "9110:13:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5536,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 5564,
                                    "name": "Identifier",
                                    "src": "9126:13:26"
                                  }
                                ],
                                "id": 5565,
                                "name": "BinaryOperation",
                                "src": "9110:29:26"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "Q96",
                                  "referencedDeclaration": 3816,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3817,
                                      "type": "type(library FixedPoint96)",
                                      "value": "FixedPoint96"
                                    },
                                    "id": 5566,
                                    "name": "Identifier",
                                    "src": "9141:12:26"
                                  }
                                ],
                                "id": 5567,
                                "name": "MemberAccess",
                                "src": "9141:16:26"
                              }
                            ],
                            "id": 5568,
                            "name": "FunctionCall",
                            "src": "9073:85:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mulDiv",
                                  "referencedDeclaration": 3946,
                                  "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3990,
                                      "type": "type(library FullMath)",
                                      "value": "FullMath"
                                    },
                                    "id": 5569,
                                    "name": "Identifier",
                                    "src": "9177:8:26"
                                  }
                                ],
                                "id": 5570,
                                "name": "MemberAccess",
                                "src": "9177:15:26"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5540,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 5571,
                                "name": "Identifier",
                                "src": "9193:9:26"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5538,
                                      "type": "uint160",
                                      "value": "sqrtRatioBX96"
                                    },
                                    "id": 5572,
                                    "name": "Identifier",
                                    "src": "9204:13:26"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5536,
                                      "type": "uint160",
                                      "value": "sqrtRatioAX96"
                                    },
                                    "id": 5573,
                                    "name": "Identifier",
                                    "src": "9220:13:26"
                                  }
                                ],
                                "id": 5574,
                                "name": "BinaryOperation",
                                "src": "9204:29:26"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "Q96",
                                  "referencedDeclaration": 3816,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3817,
                                      "type": "type(library FixedPoint96)",
                                      "value": "FixedPoint96"
                                    },
                                    "id": 5575,
                                    "name": "Identifier",
                                    "src": "9235:12:26"
                                  }
                                ],
                                "id": 5576,
                                "name": "MemberAccess",
                                "src": "9235:16:26"
                              }
                            ],
                            "id": 5577,
                            "name": "FunctionCall",
                            "src": "9177:75:26"
                          }
                        ],
                        "id": 5578,
                        "name": "Conditional",
                        "src": "9047:205:26"
                      }
                    ],
                    "id": 5579,
                    "name": "Return",
                    "src": "9028:224:26"
                  }
                ],
                "id": 5580,
                "name": "Block",
                "src": "8909:350:26"
              }
            ],
            "id": 5581,
            "name": "FunctionDefinition",
            "src": "8727:532:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount0Delta",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Helper that gets signed token0 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount0 delta\n @return amount0 Amount of token0 corresponding to the passed liquidityDelta between the two prices"
                },
                "id": 5582,
                "name": "StructuredDocumentation",
                "src": "9265:333:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "scope": 5623,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5583,
                        "name": "ElementaryTypeName",
                        "src": "9637:7:26"
                      }
                    ],
                    "id": 5584,
                    "name": "VariableDeclaration",
                    "src": "9637:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "scope": 5623,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5585,
                        "name": "ElementaryTypeName",
                        "src": "9668:7:26"
                      }
                    ],
                    "id": 5586,
                    "name": "VariableDeclaration",
                    "src": "9668:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5623,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int128",
                          "type": "int128"
                        },
                        "id": 5587,
                        "name": "ElementaryTypeName",
                        "src": "9699:6:26"
                      }
                    ],
                    "id": 5588,
                    "name": "VariableDeclaration",
                    "src": "9699:16:26"
                  }
                ],
                "id": 5589,
                "name": "ParameterList",
                "src": "9627:94:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount0",
                      "scope": 5623,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 5590,
                        "name": "ElementaryTypeName",
                        "src": "9745:6:26"
                      }
                    ],
                    "id": 5591,
                    "name": "VariableDeclaration",
                    "src": "9745:14:26"
                  }
                ],
                "id": 5592,
                "name": "ParameterList",
                "src": "9744:16:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5592
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "int256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_int128",
                                "typeString": "int128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5588,
                                  "type": "int128",
                                  "value": "liquidity"
                                },
                                "id": 5593,
                                "name": "Identifier",
                                "src": "9790:9:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5594,
                                "name": "Literal",
                                "src": "9802:1:26"
                              }
                            ],
                            "id": 5595,
                            "name": "BinaryOperation",
                            "src": "9790:13:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "prefix": true,
                              "type": "int256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "int256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toInt256",
                                      "referencedDeclaration": 5149,
                                      "type": "function (uint256) pure returns (int256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                },
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                5533,
                                                5623
                                              ],
                                              "referencedDeclaration": 5533,
                                              "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                              "value": "getAmount0Delta"
                                            },
                                            "id": 5596,
                                            "name": "Identifier",
                                            "src": "9823:15:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5584,
                                              "type": "uint160",
                                              "value": "sqrtRatioAX96"
                                            },
                                            "id": 5597,
                                            "name": "Identifier",
                                            "src": "9839:13:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5586,
                                              "type": "uint160",
                                              "value": "sqrtRatioBX96"
                                            },
                                            "id": 5598,
                                            "name": "Identifier",
                                            "src": "9854:13:26"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint128",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_int128",
                                                      "typeString": "int128"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint128)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint128"
                                                    },
                                                    "id": 5599,
                                                    "name": "ElementaryTypeName",
                                                    "src": "9869:7:26"
                                                  }
                                                ],
                                                "id": 5600,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "9869:7:26"
                                              },
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "-",
                                                  "prefix": true,
                                                  "type": "int128"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5588,
                                                      "type": "int128",
                                                      "value": "liquidity"
                                                    },
                                                    "id": 5601,
                                                    "name": "Identifier",
                                                    "src": "9878:9:26"
                                                  }
                                                ],
                                                "id": 5602,
                                                "name": "UnaryOperation",
                                                "src": "9877:10:26"
                                              }
                                            ],
                                            "id": 5603,
                                            "name": "FunctionCall",
                                            "src": "9869:19:26"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "66616c7365",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "bool",
                                              "type": "bool",
                                              "value": "false"
                                            },
                                            "id": 5604,
                                            "name": "Literal",
                                            "src": "9890:5:26"
                                          }
                                        ],
                                        "id": 5605,
                                        "name": "FunctionCall",
                                        "src": "9823:73:26"
                                      }
                                    ],
                                    "id": 5606,
                                    "name": "MemberAccess",
                                    "src": "9823:82:26"
                                  }
                                ],
                                "id": 5607,
                                "name": "FunctionCall",
                                "src": "9823:84:26"
                              }
                            ],
                            "id": 5608,
                            "name": "UnaryOperation",
                            "src": "9822:85:26"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "toInt256",
                                  "referencedDeclaration": 5149,
                                  "type": "function (uint256) pure returns (int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            },
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            5533,
                                            5623
                                          ],
                                          "referencedDeclaration": 5533,
                                          "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                          "value": "getAmount0Delta"
                                        },
                                        "id": 5609,
                                        "name": "Identifier",
                                        "src": "9926:15:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5584,
                                          "type": "uint160",
                                          "value": "sqrtRatioAX96"
                                        },
                                        "id": 5610,
                                        "name": "Identifier",
                                        "src": "9942:13:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5586,
                                          "type": "uint160",
                                          "value": "sqrtRatioBX96"
                                        },
                                        "id": 5611,
                                        "name": "Identifier",
                                        "src": "9957:13:26"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint128",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_int128",
                                                  "typeString": "int128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint128)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint128"
                                                },
                                                "id": 5612,
                                                "name": "ElementaryTypeName",
                                                "src": "9972:7:26"
                                              }
                                            ],
                                            "id": 5613,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "9972:7:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5588,
                                              "type": "int128",
                                              "value": "liquidity"
                                            },
                                            "id": 5614,
                                            "name": "Identifier",
                                            "src": "9980:9:26"
                                          }
                                        ],
                                        "id": 5615,
                                        "name": "FunctionCall",
                                        "src": "9972:18:26"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "74727565",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "bool",
                                          "type": "bool",
                                          "value": "true"
                                        },
                                        "id": 5616,
                                        "name": "Literal",
                                        "src": "9992:4:26"
                                      }
                                    ],
                                    "id": 5617,
                                    "name": "FunctionCall",
                                    "src": "9926:71:26"
                                  }
                                ],
                                "id": 5618,
                                "name": "MemberAccess",
                                "src": "9926:80:26"
                              }
                            ],
                            "id": 5619,
                            "name": "FunctionCall",
                            "src": "9926:82:26"
                          }
                        ],
                        "id": 5620,
                        "name": "Conditional",
                        "src": "9790:218:26"
                      }
                    ],
                    "id": 5621,
                    "name": "Return",
                    "src": "9771:237:26"
                  }
                ],
                "id": 5622,
                "name": "Block",
                "src": "9761:254:26"
              }
            ],
            "id": 5623,
            "name": "FunctionDefinition",
            "src": "9603:412:26"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getAmount1Delta",
              "scope": 5666,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Helper that gets signed token1 delta\n @param sqrtRatioAX96 A sqrt price\n @param sqrtRatioBX96 Another sqrt price\n @param liquidity The change in liquidity for which to compute the amount1 delta\n @return amount1 Amount of token1 corresponding to the passed liquidityDelta between the two prices"
                },
                "id": 5624,
                "name": "StructuredDocumentation",
                "src": "10021:333:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioAX96",
                      "scope": 5665,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5625,
                        "name": "ElementaryTypeName",
                        "src": "10393:7:26"
                      }
                    ],
                    "id": 5626,
                    "name": "VariableDeclaration",
                    "src": "10393:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "sqrtRatioBX96",
                      "scope": 5665,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 5627,
                        "name": "ElementaryTypeName",
                        "src": "10424:7:26"
                      }
                    ],
                    "id": 5628,
                    "name": "VariableDeclaration",
                    "src": "10424:21:26"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 5665,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int128",
                          "type": "int128"
                        },
                        "id": 5629,
                        "name": "ElementaryTypeName",
                        "src": "10455:6:26"
                      }
                    ],
                    "id": 5630,
                    "name": "VariableDeclaration",
                    "src": "10455:16:26"
                  }
                ],
                "id": 5631,
                "name": "ParameterList",
                "src": "10383:94:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount1",
                      "scope": 5665,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 5632,
                        "name": "ElementaryTypeName",
                        "src": "10501:6:26"
                      }
                    ],
                    "id": 5633,
                    "name": "VariableDeclaration",
                    "src": "10501:14:26"
                  }
                ],
                "id": 5634,
                "name": "ParameterList",
                "src": "10500:16:26"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5634
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "int256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_int128",
                                "typeString": "int128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5630,
                                  "type": "int128",
                                  "value": "liquidity"
                                },
                                "id": 5635,
                                "name": "Identifier",
                                "src": "10546:9:26"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5636,
                                "name": "Literal",
                                "src": "10558:1:26"
                              }
                            ],
                            "id": 5637,
                            "name": "BinaryOperation",
                            "src": "10546:13:26"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "prefix": true,
                              "type": "int256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "int256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toInt256",
                                      "referencedDeclaration": 5149,
                                      "type": "function (uint256) pure returns (int256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint160",
                                                  "typeString": "uint160"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                },
                                                {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                5581,
                                                5665
                                              ],
                                              "referencedDeclaration": 5581,
                                              "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                              "value": "getAmount1Delta"
                                            },
                                            "id": 5638,
                                            "name": "Identifier",
                                            "src": "10579:15:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5626,
                                              "type": "uint160",
                                              "value": "sqrtRatioAX96"
                                            },
                                            "id": 5639,
                                            "name": "Identifier",
                                            "src": "10595:13:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5628,
                                              "type": "uint160",
                                              "value": "sqrtRatioBX96"
                                            },
                                            "id": 5640,
                                            "name": "Identifier",
                                            "src": "10610:13:26"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint128",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_int128",
                                                      "typeString": "int128"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint128)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "uint128"
                                                    },
                                                    "id": 5641,
                                                    "name": "ElementaryTypeName",
                                                    "src": "10625:7:26"
                                                  }
                                                ],
                                                "id": 5642,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "10625:7:26"
                                              },
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "-",
                                                  "prefix": true,
                                                  "type": "int128"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5630,
                                                      "type": "int128",
                                                      "value": "liquidity"
                                                    },
                                                    "id": 5643,
                                                    "name": "Identifier",
                                                    "src": "10634:9:26"
                                                  }
                                                ],
                                                "id": 5644,
                                                "name": "UnaryOperation",
                                                "src": "10633:10:26"
                                              }
                                            ],
                                            "id": 5645,
                                            "name": "FunctionCall",
                                            "src": "10625:19:26"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "66616c7365",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "bool",
                                              "type": "bool",
                                              "value": "false"
                                            },
                                            "id": 5646,
                                            "name": "Literal",
                                            "src": "10646:5:26"
                                          }
                                        ],
                                        "id": 5647,
                                        "name": "FunctionCall",
                                        "src": "10579:73:26"
                                      }
                                    ],
                                    "id": 5648,
                                    "name": "MemberAccess",
                                    "src": "10579:82:26"
                                  }
                                ],
                                "id": 5649,
                                "name": "FunctionCall",
                                "src": "10579:84:26"
                              }
                            ],
                            "id": 5650,
                            "name": "UnaryOperation",
                            "src": "10578:85:26"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "toInt256",
                                  "referencedDeclaration": 5149,
                                  "type": "function (uint256) pure returns (int256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint160",
                                              "typeString": "uint160"
                                            },
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            },
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            5581,
                                            5665
                                          ],
                                          "referencedDeclaration": 5581,
                                          "type": "function (uint160,uint160,uint128,bool) pure returns (uint256)",
                                          "value": "getAmount1Delta"
                                        },
                                        "id": 5651,
                                        "name": "Identifier",
                                        "src": "10682:15:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5626,
                                          "type": "uint160",
                                          "value": "sqrtRatioAX96"
                                        },
                                        "id": 5652,
                                        "name": "Identifier",
                                        "src": "10698:13:26"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5628,
                                          "type": "uint160",
                                          "value": "sqrtRatioBX96"
                                        },
                                        "id": 5653,
                                        "name": "Identifier",
                                        "src": "10713:13:26"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint128",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_int128",
                                                  "typeString": "int128"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(uint128)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "uint128"
                                                },
                                                "id": 5654,
                                                "name": "ElementaryTypeName",
                                                "src": "10728:7:26"
                                              }
                                            ],
                                            "id": 5655,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "10728:7:26"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5630,
                                              "type": "int128",
                                              "value": "liquidity"
                                            },
                                            "id": 5656,
                                            "name": "Identifier",
                                            "src": "10736:9:26"
                                          }
                                        ],
                                        "id": 5657,
                                        "name": "FunctionCall",
                                        "src": "10728:18:26"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "74727565",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "bool",
                                          "type": "bool",
                                          "value": "true"
                                        },
                                        "id": 5658,
                                        "name": "Literal",
                                        "src": "10748:4:26"
                                      }
                                    ],
                                    "id": 5659,
                                    "name": "FunctionCall",
                                    "src": "10682:71:26"
                                  }
                                ],
                                "id": 5660,
                                "name": "MemberAccess",
                                "src": "10682:80:26"
                              }
                            ],
                            "id": 5661,
                            "name": "FunctionCall",
                            "src": "10682:82:26"
                          }
                        ],
                        "id": 5662,
                        "name": "Conditional",
                        "src": "10546:218:26"
                      }
                    ],
                    "id": 5663,
                    "name": "Return",
                    "src": "10527:237:26"
                  }
                ],
                "id": 5664,
                "name": "Block",
                "src": "10517:254:26"
              }
            ],
            "id": 5665,
            "name": "FunctionDefinition",
            "src": "10359:412:26"
          }
        ],
        "id": 5666,
        "name": "ContractDefinition",
        "src": "369:10404:26"
      }
    ],
    "id": 5667,
    "name": "SourceUnit",
    "src": "37:10737:26"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2022-01-17T20:05:41.779Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "title": "Functions based on Q64.96 sqrt price and liquidity",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "Contains the math that uses square root of price as a Q64.96 and liquidity to compute deltas",
    "version": 1
  }
}