{
  "contractName": "Oracle",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Instances of stored oracle data, \\\"observations\\\", are collected in the oracle array Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the maximum length of the oracle array. New slots will be added when the array is fully populated. Observations are overwritten when the full length of the oracle array is populated. The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe()\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Oracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides price and liquidity data useful for a wide variety of system designs\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Oracle.sol\":\"Oracle\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Oracle.sol\":{\"keccak256\":\"0x727f859fedfcb0402e648407042c022e3fa6568cb137ead98606166f10311772\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://d5500452fc47f728c5aff23fdecd19ce1083dc7562d7cc241a7e3b6740ded8c2\",\"dweb:/ipfs/QmXPCRHEn68oEM8uMMiWYScGtaUwfkN2DuajiAyzTgHnaF\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209476a22fac39f0ecc82f408d03ef8e24819954990735a975cddf52e109b96bd364736f6c63430007060033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209476a22fac39f0ecc82f408d03ef8e24819954990735a975cddf52e109b96bd364736f6c63430007060033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "676:15731:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "676:15731:23:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity >=0.5.0;\n\n/// @title Oracle\n/// @notice Provides price and liquidity data useful for a wide variety of system designs\n/// @dev Instances of stored oracle data, \"observations\", are collected in the oracle array\n/// Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the\n/// maximum length of the oracle array. New slots will be added when the array is fully populated.\n/// Observations are overwritten when the full length of the oracle array is populated.\n/// The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe()\nlibrary Oracle {\n    struct Observation {\n        // the block timestamp of the observation\n        uint32 blockTimestamp;\n        // the tick accumulator, i.e. tick * time elapsed since the pool was first initialized\n        int56 tickCumulative;\n        // the seconds per liquidity, i.e. seconds elapsed / max(1, liquidity) since the pool was first initialized\n        uint160 secondsPerLiquidityCumulativeX128;\n        // whether or not the observation is initialized\n        bool initialized;\n    }\n\n    /// @notice Transforms a previous observation into a new observation, given the passage of time and the current tick and liquidity values\n    /// @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows\n    /// @param last The specified observation to be transformed\n    /// @param blockTimestamp The timestamp of the new observation\n    /// @param tick The active tick at the time of the new observation\n    /// @param liquidity The total in-range liquidity at the time of the new observation\n    /// @return Observation The newly populated observation\n    function transform(\n        Observation memory last,\n        uint32 blockTimestamp,\n        int24 tick,\n        uint128 liquidity\n    ) private pure returns (Observation memory) {\n        uint32 delta = blockTimestamp - last.blockTimestamp;\n        return\n            Observation({\n                blockTimestamp: blockTimestamp,\n                tickCumulative: last.tickCumulative + int56(tick) * delta,\n                secondsPerLiquidityCumulativeX128: last.secondsPerLiquidityCumulativeX128 +\n                    ((uint160(delta) << 128) / (liquidity > 0 ? liquidity : 1)),\n                initialized: true\n            });\n    }\n\n    /// @notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array\n    /// @param self The stored oracle array\n    /// @param time The time of the oracle initialization, via block.timestamp truncated to uint32\n    /// @return cardinality The number of populated elements in the oracle array\n    /// @return cardinalityNext The new length of the oracle array, independent of population\n    function initialize(Observation[65535] storage self, uint32 time)\n        internal\n        returns (uint16 cardinality, uint16 cardinalityNext)\n    {\n        self[0] = Observation({\n            blockTimestamp: time,\n            tickCumulative: 0,\n            secondsPerLiquidityCumulativeX128: 0,\n            initialized: true\n        });\n        return (1, 1);\n    }\n\n    /// @notice Writes an oracle observation to the array\n    /// @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally.\n    /// If the index is at the end of the allowable array length (according to cardinality), and the next cardinality\n    /// is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering.\n    /// @param self The stored oracle array\n    /// @param index The index of the observation that was most recently written to the observations array\n    /// @param blockTimestamp The timestamp of the new observation\n    /// @param tick The active tick at the time of the new observation\n    /// @param liquidity The total in-range liquidity at the time of the new observation\n    /// @param cardinality The number of populated elements in the oracle array\n    /// @param cardinalityNext The new length of the oracle array, independent of population\n    /// @return indexUpdated The new index of the most recently written element in the oracle array\n    /// @return cardinalityUpdated The new cardinality of the oracle array\n    function write(\n        Observation[65535] storage self,\n        uint16 index,\n        uint32 blockTimestamp,\n        int24 tick,\n        uint128 liquidity,\n        uint16 cardinality,\n        uint16 cardinalityNext\n    ) internal returns (uint16 indexUpdated, uint16 cardinalityUpdated) {\n        Observation memory last = self[index];\n\n        // early return if we've already written an observation this block\n        if (last.blockTimestamp == blockTimestamp) return (index, cardinality);\n\n        // if the conditions are right, we can bump the cardinality\n        if (cardinalityNext > cardinality && index == (cardinality - 1)) {\n            cardinalityUpdated = cardinalityNext;\n        } else {\n            cardinalityUpdated = cardinality;\n        }\n\n        indexUpdated = (index + 1) % cardinalityUpdated;\n        self[indexUpdated] = transform(last, blockTimestamp, tick, liquidity);\n    }\n\n    /// @notice Prepares the oracle array to store up to `next` observations\n    /// @param self The stored oracle array\n    /// @param current The current next cardinality of the oracle array\n    /// @param next The proposed next cardinality which will be populated in the oracle array\n    /// @return next The next cardinality which will be populated in the oracle array\n    function grow(\n        Observation[65535] storage self,\n        uint16 current,\n        uint16 next\n    ) internal returns (uint16) {\n        require(current > 0, 'I');\n        // no-op if the passed next value isn't greater than the current next value\n        if (next <= current) return current;\n        // store in each slot to prevent fresh SSTOREs in swaps\n        // this data will not be used because the initialized boolean is still false\n        for (uint16 i = current; i < next; i++) self[i].blockTimestamp = 1;\n        return next;\n    }\n\n    /// @notice comparator for 32-bit timestamps\n    /// @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time\n    /// @param time A timestamp truncated to 32 bits\n    /// @param a A comparison timestamp from which to determine the relative position of `time`\n    /// @param b From which to determine the relative position of `time`\n    /// @return bool Whether `a` is chronologically <= `b`\n    function lte(\n        uint32 time,\n        uint32 a,\n        uint32 b\n    ) private pure returns (bool) {\n        // if there hasn't been overflow, no need to adjust\n        if (a <= time && b <= time) return a <= b;\n\n        uint256 aAdjusted = a > time ? a : a + 2**32;\n        uint256 bAdjusted = b > time ? b : b + 2**32;\n\n        return aAdjusted <= bAdjusted;\n    }\n\n    /// @notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied.\n    /// The result may be the same observation, or adjacent observations.\n    /// @dev The answer must be contained in the array, used when the target is located within the stored observation\n    /// boundaries: older than the most recent observation and younger, or the same age as, the oldest observation\n    /// @param self The stored oracle array\n    /// @param time The current block.timestamp\n    /// @param target The timestamp at which the reserved observation should be for\n    /// @param index The index of the observation that was most recently written to the observations array\n    /// @param cardinality The number of populated elements in the oracle array\n    /// @return beforeOrAt The observation recorded before, or at, the target\n    /// @return atOrAfter The observation recorded at, or after, the target\n    function binarySearch(\n        Observation[65535] storage self,\n        uint32 time,\n        uint32 target,\n        uint16 index,\n        uint16 cardinality\n    ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {\n        uint256 l = (index + 1) % cardinality; // oldest observation\n        uint256 r = l + cardinality - 1; // newest observation\n        uint256 i;\n        while (true) {\n            i = (l + r) / 2;\n\n            beforeOrAt = self[i % cardinality];\n\n            // we've landed on an uninitialized tick, keep searching higher (more recently)\n            if (!beforeOrAt.initialized) {\n                l = i + 1;\n                continue;\n            }\n\n            atOrAfter = self[(i + 1) % cardinality];\n\n            bool targetAtOrAfter = lte(time, beforeOrAt.blockTimestamp, target);\n\n            // check if we've found the answer!\n            if (targetAtOrAfter && lte(time, target, atOrAfter.blockTimestamp)) break;\n\n            if (!targetAtOrAfter) r = i - 1;\n            else l = i + 1;\n        }\n    }\n\n    /// @notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied\n    /// @dev Assumes there is at least 1 initialized observation.\n    /// Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp.\n    /// @param self The stored oracle array\n    /// @param time The current block.timestamp\n    /// @param target The timestamp at which the reserved observation should be for\n    /// @param tick The active tick at the time of the returned or simulated observation\n    /// @param index The index of the observation that was most recently written to the observations array\n    /// @param liquidity The total pool liquidity at the time of the call\n    /// @param cardinality The number of populated elements in the oracle array\n    /// @return beforeOrAt The observation which occurred at, or before, the given timestamp\n    /// @return atOrAfter The observation which occurred at, or after, the given timestamp\n    function getSurroundingObservations(\n        Observation[65535] storage self,\n        uint32 time,\n        uint32 target,\n        int24 tick,\n        uint16 index,\n        uint128 liquidity,\n        uint16 cardinality\n    ) private view returns (Observation memory beforeOrAt, Observation memory atOrAfter) {\n        // optimistically set before to the newest observation\n        beforeOrAt = self[index];\n\n        // if the target is chronologically at or after the newest observation, we can early return\n        if (lte(time, beforeOrAt.blockTimestamp, target)) {\n            if (beforeOrAt.blockTimestamp == target) {\n                // if newest observation equals target, we're in the same block, so we can ignore atOrAfter\n                return (beforeOrAt, atOrAfter);\n            } else {\n                // otherwise, we need to transform\n                return (beforeOrAt, transform(beforeOrAt, target, tick, liquidity));\n            }\n        }\n\n        // now, set before to the oldest observation\n        beforeOrAt = self[(index + 1) % cardinality];\n        if (!beforeOrAt.initialized) beforeOrAt = self[0];\n\n        // ensure that the target is chronologically at or after the oldest observation\n        require(lte(time, beforeOrAt.blockTimestamp, target), 'OLD');\n\n        // if we've reached this point, we have to binary search\n        return binarySearch(self, time, target, index, cardinality);\n    }\n\n    /// @dev Reverts if an observation at or before the desired observation timestamp does not exist.\n    /// 0 may be passed as `secondsAgo' to return the current cumulative values.\n    /// If called with a timestamp falling between two observations, returns the counterfactual accumulator values\n    /// at exactly the timestamp between the two observations.\n    /// @param self The stored oracle array\n    /// @param time The current block timestamp\n    /// @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation\n    /// @param tick The current tick\n    /// @param index The index of the observation that was most recently written to the observations array\n    /// @param liquidity The current in-range pool liquidity\n    /// @param cardinality The number of populated elements in the oracle array\n    /// @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo`\n    /// @return secondsPerLiquidityCumulativeX128 The time elapsed / max(1, liquidity) since the pool was first initialized, as of `secondsAgo`\n    function observeSingle(\n        Observation[65535] storage self,\n        uint32 time,\n        uint32 secondsAgo,\n        int24 tick,\n        uint16 index,\n        uint128 liquidity,\n        uint16 cardinality\n    ) internal view returns (int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128) {\n        if (secondsAgo == 0) {\n            Observation memory last = self[index];\n            if (last.blockTimestamp != time) last = transform(last, time, tick, liquidity);\n            return (last.tickCumulative, last.secondsPerLiquidityCumulativeX128);\n        }\n\n        uint32 target = time - secondsAgo;\n\n        (Observation memory beforeOrAt, Observation memory atOrAfter) =\n            getSurroundingObservations(self, time, target, tick, index, liquidity, cardinality);\n\n        if (target == beforeOrAt.blockTimestamp) {\n            // we're at the left boundary\n            return (beforeOrAt.tickCumulative, beforeOrAt.secondsPerLiquidityCumulativeX128);\n        } else if (target == atOrAfter.blockTimestamp) {\n            // we're at the right boundary\n            return (atOrAfter.tickCumulative, atOrAfter.secondsPerLiquidityCumulativeX128);\n        } else {\n            // we're in the middle\n            uint32 observationTimeDelta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp;\n            uint32 targetDelta = target - beforeOrAt.blockTimestamp;\n            return (\n                beforeOrAt.tickCumulative +\n                    ((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / observationTimeDelta) *\n                    targetDelta,\n                beforeOrAt.secondsPerLiquidityCumulativeX128 +\n                    uint160(\n                        (uint256(\n                            atOrAfter.secondsPerLiquidityCumulativeX128 - beforeOrAt.secondsPerLiquidityCumulativeX128\n                        ) * targetDelta) / observationTimeDelta\n                    )\n            );\n        }\n    }\n\n    /// @notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos`\n    /// @dev Reverts if `secondsAgos` > oldest observation\n    /// @param self The stored oracle array\n    /// @param time The current block.timestamp\n    /// @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation\n    /// @param tick The current tick\n    /// @param index The index of the observation that was most recently written to the observations array\n    /// @param liquidity The current in-range pool liquidity\n    /// @param cardinality The number of populated elements in the oracle array\n    /// @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo`\n    /// @return secondsPerLiquidityCumulativeX128s The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo`\n    function observe(\n        Observation[65535] storage self,\n        uint32 time,\n        uint32[] memory secondsAgos,\n        int24 tick,\n        uint16 index,\n        uint128 liquidity,\n        uint16 cardinality\n    ) internal view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s) {\n        require(cardinality > 0, 'I');\n\n        tickCumulatives = new int56[](secondsAgos.length);\n        secondsPerLiquidityCumulativeX128s = new uint160[](secondsAgos.length);\n        for (uint256 i = 0; i < secondsAgos.length; i++) {\n            (tickCumulatives[i], secondsPerLiquidityCumulativeX128s[i]) = observeSingle(\n                self,\n                time,\n                secondsAgos[i],\n                tick,\n                index,\n                liquidity,\n                cardinality\n            );\n        }\n    }\n}\n",
  "sourcePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Oracle.sol",
  "ast": {
    "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Oracle.sol",
    "exportedSymbols": {
      "Oracle": [
        4907
      ]
    },
    "id": 4908,
    "license": "BUSL-1.1",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4174,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "37:24:23"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 4175,
          "nodeType": "StructuredDocumentation",
          "src": "63:613:23",
          "text": "@title Oracle\n @notice Provides price and liquidity data useful for a wide variety of system designs\n @dev Instances of stored oracle data, \"observations\", are collected in the oracle array\n Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the\n maximum length of the oracle array. New slots will be added when the array is fully populated.\n Observations are overwritten when the full length of the oracle array is populated.\n The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe()"
        },
        "fullyImplemented": true,
        "id": 4907,
        "linearizedBaseContracts": [
          4907
        ],
        "name": "Oracle",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Oracle.Observation",
            "id": 4184,
            "members": [
              {
                "constant": false,
                "id": 4177,
                "mutability": "mutable",
                "name": "blockTimestamp",
                "nodeType": "VariableDeclaration",
                "scope": 4184,
                "src": "776:21:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 4176,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "776:6:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4179,
                "mutability": "mutable",
                "name": "tickCumulative",
                "nodeType": "VariableDeclaration",
                "scope": 4184,
                "src": "902:20:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_int56",
                  "typeString": "int56"
                },
                "typeName": {
                  "id": 4178,
                  "name": "int56",
                  "nodeType": "ElementaryTypeName",
                  "src": "902:5:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int56",
                    "typeString": "int56"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4181,
                "mutability": "mutable",
                "name": "secondsPerLiquidityCumulativeX128",
                "nodeType": "VariableDeclaration",
                "scope": 4184,
                "src": "1048:41:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint160",
                  "typeString": "uint160"
                },
                "typeName": {
                  "id": 4180,
                  "name": "uint160",
                  "nodeType": "ElementaryTypeName",
                  "src": "1048:7:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4183,
                "mutability": "mutable",
                "name": "initialized",
                "nodeType": "VariableDeclaration",
                "scope": 4184,
                "src": "1156:16:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 4182,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1156:4:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Observation",
            "nodeType": "StructDefinition",
            "scope": 4907,
            "src": "697:482:23",
            "visibility": "public"
          },
          {
            "body": {
              "id": 4238,
              "nodeType": "Block",
              "src": "1982:455:23",
              "statements": [
                {
                  "assignments": [
                    4199
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4199,
                      "mutability": "mutable",
                      "name": "delta",
                      "nodeType": "VariableDeclaration",
                      "scope": 4238,
                      "src": "1992:12:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4198,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1992:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4204,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 4203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4200,
                      "name": "blockTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4189,
                      "src": "2007:14:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 4201,
                        "name": "last",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4187,
                        "src": "2024:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                          "typeString": "struct Oracle.Observation memory"
                        }
                      },
                      "id": 4202,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "blockTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4177,
                      "src": "2024:19:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "2007:36:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1992:51:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4206,
                        "name": "blockTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4189,
                        "src": "2118:14:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "id": 4215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4207,
                            "name": "last",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4187,
                            "src": "2166:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                              "typeString": "struct Oracle.Observation memory"
                            }
                          },
                          "id": 4208,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "tickCumulative",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4179,
                          "src": "2166:19:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          },
                          "id": 4214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 4211,
                                "name": "tick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4191,
                                "src": "2194:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "id": 4210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2188:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int56_$",
                                "typeString": "type(int56)"
                              },
                              "typeName": {
                                "id": 4209,
                                "name": "int56",
                                "nodeType": "ElementaryTypeName",
                                "src": "2188:5:23",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2188:11:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 4213,
                            "name": "delta",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4199,
                            "src": "2202:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "2188:19:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "src": "2166:41:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "id": 4234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 4216,
                            "name": "last",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4187,
                            "src": "2260:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                              "typeString": "struct Oracle.Observation memory"
                            }
                          },
                          "id": 4217,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "secondsPerLiquidityCumulativeX128",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4181,
                          "src": "2260:38:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "id": 4232,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    },
                                    "id": 4223,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 4220,
                                          "name": "delta",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4199,
                                          "src": "2331:5:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        ],
                                        "id": 4219,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "2323:7:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint160_$",
                                          "typeString": "type(uint160)"
                                        },
                                        "typeName": {
                                          "id": 4218,
                                          "name": "uint160",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2323:7:23",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 4221,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2323:14:23",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "313238",
                                      "id": 4222,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2341:3:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "2323:21:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint160",
                                      "typeString": "uint160"
                                    }
                                  }
                                ],
                                "id": 4224,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2322:23:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      },
                                      "id": 4227,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 4225,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4193,
                                        "src": "2349:9:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 4226,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2361:1:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "2349:13:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "31",
                                      "id": 4229,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2377:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "id": 4230,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "2349:29:23",
                                    "trueExpression": {
                                      "id": 4228,
                                      "name": "liquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4193,
                                      "src": "2365:9:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "id": 4231,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "2348:31:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "src": "2322:57:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "id": 4233,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2321:59:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "src": "2260:120:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 4235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2411:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4205,
                      "name": "Observation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4184,
                      "src": "2072:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_Observation_$4184_storage_ptr_$",
                        "typeString": "type(struct Oracle.Observation storage pointer)"
                      }
                    },
                    "id": 4236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [
                      "blockTimestamp",
                      "tickCumulative",
                      "secondsPerLiquidityCumulativeX128",
                      "initialized"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "2072:358:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                      "typeString": "struct Oracle.Observation memory"
                    }
                  },
                  "functionReturnParameters": 4197,
                  "id": 4237,
                  "nodeType": "Return",
                  "src": "2053:377:23"
                }
              ]
            },
            "documentation": {
              "id": 4185,
              "nodeType": "StructuredDocumentation",
              "src": "1185:614:23",
              "text": "@notice Transforms a previous observation into a new observation, given the passage of time and the current tick and liquidity values\n @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows\n @param last The specified observation to be transformed\n @param blockTimestamp The timestamp of the new observation\n @param tick The active tick at the time of the new observation\n @param liquidity The total in-range liquidity at the time of the new observation\n @return Observation The newly populated observation"
            },
            "id": 4239,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transform",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4187,
                  "mutability": "mutable",
                  "name": "last",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "1832:23:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                    "typeString": "struct Oracle.Observation"
                  },
                  "typeName": {
                    "id": 4186,
                    "name": "Observation",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4184,
                    "src": "1832:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                      "typeString": "struct Oracle.Observation"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4189,
                  "mutability": "mutable",
                  "name": "blockTimestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "1865:21:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4188,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1865:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4191,
                  "mutability": "mutable",
                  "name": "tick",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "1896:10:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4190,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1896:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4193,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "1916:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 4192,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "1916:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1822:117:23"
            },
            "returnParameters": {
              "id": 4197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4196,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4239,
                  "src": "1962:18:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                    "typeString": "struct Oracle.Observation"
                  },
                  "typeName": {
                    "id": 4195,
                    "name": "Observation",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4184,
                    "src": "1962:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                      "typeString": "struct Oracle.Observation"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1961:20:23"
            },
            "scope": 4907,
            "src": "1804:633:23",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 4268,
              "nodeType": "Block",
              "src": "3036:219:23",
              "statements": [
                {
                  "expression": {
                    "id": 4262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4253,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4244,
                        "src": "3046:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        }
                      },
                      "id": 4255,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 4254,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3051:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3046:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage",
                        "typeString": "struct Oracle.Observation storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 4257,
                          "name": "time",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4246,
                          "src": "3098:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "hexValue": "30",
                          "id": 4258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3132:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        {
                          "hexValue": "30",
                          "id": 4259,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3182:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        {
                          "hexValue": "74727565",
                          "id": 4260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3210:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        ],
                        "id": 4256,
                        "name": "Observation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4184,
                        "src": "3056:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_Observation_$4184_storage_ptr_$",
                          "typeString": "type(struct Oracle.Observation storage pointer)"
                        }
                      },
                      "id": 4261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "names": [
                        "blockTimestamp",
                        "tickCumulative",
                        "secondsPerLiquidityCumulativeX128",
                        "initialized"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "3056:169:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation memory"
                      }
                    },
                    "src": "3046:179:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage",
                      "typeString": "struct Oracle.Observation storage ref"
                    }
                  },
                  "id": 4263,
                  "nodeType": "ExpressionStatement",
                  "src": "3046:179:23"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "hexValue": "31",
                        "id": 4264,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3243:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "hexValue": "31",
                        "id": 4265,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3246:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "id": 4266,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3242:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_rational_1_by_1_$_t_rational_1_by_1_$",
                      "typeString": "tuple(int_const 1,int_const 1)"
                    }
                  },
                  "functionReturnParameters": 4252,
                  "id": 4267,
                  "nodeType": "Return",
                  "src": "3235:13:23"
                }
              ]
            },
            "documentation": {
              "id": 4240,
              "nodeType": "StructuredDocumentation",
              "src": "2443:440:23",
              "text": "@notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array\n @param self The stored oracle array\n @param time The time of the oracle initialization, via block.timestamp truncated to uint32\n @return cardinality The number of populated elements in the oracle array\n @return cardinalityNext The new length of the oracle array, independent of population"
            },
            "id": 4269,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4244,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "2908:31:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                    "typeString": "struct Oracle.Observation[65535]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4241,
                      "name": "Observation",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4184,
                      "src": "2908:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                        "typeString": "struct Oracle.Observation"
                      }
                    },
                    "id": 4243,
                    "length": {
                      "hexValue": "3635353335",
                      "id": 4242,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2920:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65535_by_1",
                        "typeString": "int_const 65535"
                      },
                      "value": "65535"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2908:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                      "typeString": "struct Oracle.Observation[65535]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4246,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "2941:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4245,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2941:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2907:46:23"
            },
            "returnParameters": {
              "id": 4252,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4249,
                  "mutability": "mutable",
                  "name": "cardinality",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "2988:18:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4248,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "2988:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4251,
                  "mutability": "mutable",
                  "name": "cardinalityNext",
                  "nodeType": "VariableDeclaration",
                  "scope": 4269,
                  "src": "3008:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4250,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3008:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2987:44:23"
            },
            "scope": 4907,
            "src": "2888:367:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4349,
              "nodeType": "Block",
              "src": "4720:614:23",
              "statements": [
                {
                  "assignments": [
                    4294
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4294,
                      "mutability": "mutable",
                      "name": "last",
                      "nodeType": "VariableDeclaration",
                      "scope": 4349,
                      "src": "4730:23:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation"
                      },
                      "typeName": {
                        "id": 4293,
                        "name": "Observation",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4184,
                        "src": "4730:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                          "typeString": "struct Oracle.Observation"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4298,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4295,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4274,
                      "src": "4756:4:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                        "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                      }
                    },
                    "id": 4297,
                    "indexExpression": {
                      "id": 4296,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4276,
                      "src": "4761:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4756:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage",
                      "typeString": "struct Oracle.Observation storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4730:37:23"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 4302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4299,
                        "name": "last",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294,
                        "src": "4857:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                          "typeString": "struct Oracle.Observation memory"
                        }
                      },
                      "id": 4300,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "blockTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4177,
                      "src": "4857:19:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 4301,
                      "name": "blockTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4278,
                      "src": "4880:14:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "4857:37:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4307,
                  "nodeType": "IfStatement",
                  "src": "4853:70:23",
                  "trueBody": {
                    "expression": {
                      "components": [
                        {
                          "id": 4303,
                          "name": "index",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4276,
                          "src": "4904:5:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        {
                          "id": 4304,
                          "name": "cardinality",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4284,
                          "src": "4911:11:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        }
                      ],
                      "id": 4305,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "4903:20:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint16_$_t_uint16_$",
                        "typeString": "tuple(uint16,uint16)"
                      }
                    },
                    "functionReturnParameters": 4292,
                    "id": 4306,
                    "nodeType": "Return",
                    "src": "4896:27:23"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "id": 4310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4308,
                        "name": "cardinalityNext",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4286,
                        "src": "5006:15:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 4309,
                        "name": "cardinality",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4284,
                        "src": "5024:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "5006:29:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "id": 4316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4311,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4276,
                        "src": "5039:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "id": 4314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4312,
                              "name": "cardinality",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4284,
                              "src": "5049:11:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 4313,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5063:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "5049:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "id": 4315,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5048:17:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "5039:26:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5006:59:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4327,
                    "nodeType": "Block",
                    "src": "5134:57:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 4325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4323,
                            "name": "cardinalityUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4291,
                            "src": "5148:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4324,
                            "name": "cardinality",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4284,
                            "src": "5169:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "5148:32:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 4326,
                        "nodeType": "ExpressionStatement",
                        "src": "5148:32:23"
                      }
                    ]
                  },
                  "id": 4328,
                  "nodeType": "IfStatement",
                  "src": "5002:189:23",
                  "trueBody": {
                    "id": 4322,
                    "nodeType": "Block",
                    "src": "5067:61:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 4320,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4318,
                            "name": "cardinalityUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4291,
                            "src": "5081:18:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4319,
                            "name": "cardinalityNext",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4286,
                            "src": "5102:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "5081:36:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 4321,
                        "nodeType": "ExpressionStatement",
                        "src": "5081:36:23"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 4336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4329,
                      "name": "indexUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4289,
                      "src": "5201:12:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "id": 4335,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            "id": 4332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4330,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4276,
                              "src": "5217:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 4331,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5225:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "5217:9:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          }
                        ],
                        "id": 4333,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5216:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "%",
                      "rightExpression": {
                        "id": 4334,
                        "name": "cardinalityUpdated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4291,
                        "src": "5230:18:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "5216:32:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "5201:47:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "id": 4337,
                  "nodeType": "ExpressionStatement",
                  "src": "5201:47:23"
                },
                {
                  "expression": {
                    "id": 4347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4338,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4274,
                        "src": "5258:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        }
                      },
                      "id": 4340,
                      "indexExpression": {
                        "id": 4339,
                        "name": "indexUpdated",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4289,
                        "src": "5263:12:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5258:18:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage",
                        "typeString": "struct Oracle.Observation storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 4342,
                          "name": "last",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294,
                          "src": "5289:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                            "typeString": "struct Oracle.Observation memory"
                          }
                        },
                        {
                          "id": 4343,
                          "name": "blockTimestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4278,
                          "src": "5295:14:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "id": 4344,
                          "name": "tick",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4280,
                          "src": "5311:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        {
                          "id": 4345,
                          "name": "liquidity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4282,
                          "src": "5317:9:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                            "typeString": "struct Oracle.Observation memory"
                          },
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          },
                          {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        ],
                        "id": 4341,
                        "name": "transform",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4239,
                        "src": "5279:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_Observation_$4184_memory_ptr_$_t_uint32_$_t_int24_$_t_uint128_$returns$_t_struct$_Observation_$4184_memory_ptr_$",
                          "typeString": "function (struct Oracle.Observation memory,uint32,int24,uint128) pure returns (struct Oracle.Observation memory)"
                        }
                      },
                      "id": 4346,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5279:48:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation memory"
                      }
                    },
                    "src": "5258:69:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage",
                      "typeString": "struct Oracle.Observation storage ref"
                    }
                  },
                  "id": 4348,
                  "nodeType": "ExpressionStatement",
                  "src": "5258:69:23"
                }
              ]
            },
            "documentation": {
              "id": 4270,
              "nodeType": "StructuredDocumentation",
              "src": "3261:1166:23",
              "text": "@notice Writes an oracle observation to the array\n @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally.\n If the index is at the end of the allowable array length (according to cardinality), and the next cardinality\n is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering.\n @param self The stored oracle array\n @param index The index of the observation that was most recently written to the observations array\n @param blockTimestamp The timestamp of the new observation\n @param tick The active tick at the time of the new observation\n @param liquidity The total in-range liquidity at the time of the new observation\n @param cardinality The number of populated elements in the oracle array\n @param cardinalityNext The new length of the oracle array, independent of population\n @return indexUpdated The new index of the most recently written element in the oracle array\n @return cardinalityUpdated The new cardinality of the oracle array"
            },
            "id": 4350,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "write",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4287,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4274,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4456:31:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                    "typeString": "struct Oracle.Observation[65535]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4271,
                      "name": "Observation",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4184,
                      "src": "4456:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                        "typeString": "struct Oracle.Observation"
                      }
                    },
                    "id": 4273,
                    "length": {
                      "hexValue": "3635353335",
                      "id": 4272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4468:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65535_by_1",
                        "typeString": "int_const 65535"
                      },
                      "value": "65535"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "4456:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                      "typeString": "struct Oracle.Observation[65535]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4276,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4497:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4275,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4497:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4278,
                  "mutability": "mutable",
                  "name": "blockTimestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4519:21:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4277,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4519:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4280,
                  "mutability": "mutable",
                  "name": "tick",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4550:10:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4279,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "4550:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4282,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4570:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 4281,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "4570:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4284,
                  "mutability": "mutable",
                  "name": "cardinality",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4597:18:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4283,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4597:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4286,
                  "mutability": "mutable",
                  "name": "cardinalityNext",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4625:22:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4285,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4625:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4446:207:23"
            },
            "returnParameters": {
              "id": 4292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4289,
                  "mutability": "mutable",
                  "name": "indexUpdated",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4672:19:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4288,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4672:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4291,
                  "mutability": "mutable",
                  "name": "cardinalityUpdated",
                  "nodeType": "VariableDeclaration",
                  "scope": 4350,
                  "src": "4693:25:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4290,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "4693:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4671:48:23"
            },
            "scope": 4907,
            "src": "4432:902:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4397,
              "nodeType": "Block",
              "src": "5845:417:23",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 4367,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4365,
                          "name": "current",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4357,
                          "src": "5863:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 4366,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5873:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5863:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "49",
                        "id": 4368,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5876:3:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216",
                          "typeString": "literal_string \"I\""
                        },
                        "value": "I"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216",
                          "typeString": "literal_string \"I\""
                        }
                      ],
                      "id": 4364,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5855:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5855:25:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4370,
                  "nodeType": "ExpressionStatement",
                  "src": "5855:25:23"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 4373,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4371,
                      "name": "next",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4359,
                      "src": "5978:4:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 4372,
                      "name": "current",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4357,
                      "src": "5986:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "5978:15:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4376,
                  "nodeType": "IfStatement",
                  "src": "5974:35:23",
                  "trueBody": {
                    "expression": {
                      "id": 4374,
                      "name": "current",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4357,
                      "src": "6002:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "functionReturnParameters": 4363,
                    "id": 4375,
                    "nodeType": "Return",
                    "src": "5995:14:23"
                  }
                },
                {
                  "body": {
                    "expression": {
                      "id": 4392,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "expression": {
                          "baseExpression": {
                            "id": 4387,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4355,
                            "src": "6208:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                              "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                            }
                          },
                          "id": 4389,
                          "indexExpression": {
                            "id": 4388,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4378,
                            "src": "6213:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "6208:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Observation_$4184_storage",
                            "typeString": "struct Oracle.Observation storage ref"
                          }
                        },
                        "id": 4390,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "blockTimestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4177,
                        "src": "6208:22:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "hexValue": "31",
                        "id": 4391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6233:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "6208:26:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 4393,
                    "nodeType": "ExpressionStatement",
                    "src": "6208:26:23"
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 4383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4381,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4378,
                      "src": "6193:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 4382,
                      "name": "next",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4359,
                      "src": "6197:4:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "6193:8:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4394,
                  "initializationExpression": {
                    "assignments": [
                      4378
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4378,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4394,
                        "src": "6173:8:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 4377,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "6173:6:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 4380,
                    "initialValue": {
                      "id": 4379,
                      "name": "current",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4357,
                      "src": "6184:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6173:18:23"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 4385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6203:3:23",
                      "subExpression": {
                        "id": 4384,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4378,
                        "src": "6203:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "id": 4386,
                    "nodeType": "ExpressionStatement",
                    "src": "6203:3:23"
                  },
                  "nodeType": "ForStatement",
                  "src": "6168:66:23"
                },
                {
                  "expression": {
                    "id": 4395,
                    "name": "next",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4359,
                    "src": "6251:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 4363,
                  "id": 4396,
                  "nodeType": "Return",
                  "src": "6244:11:23"
                }
              ]
            },
            "documentation": {
              "id": 4351,
              "nodeType": "StructuredDocumentation",
              "src": "5340:368:23",
              "text": "@notice Prepares the oracle array to store up to `next` observations\n @param self The stored oracle array\n @param current The current next cardinality of the oracle array\n @param next The proposed next cardinality which will be populated in the oracle array\n @return next The next cardinality which will be populated in the oracle array"
            },
            "id": 4398,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "grow",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4360,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4355,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4398,
                  "src": "5736:31:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                    "typeString": "struct Oracle.Observation[65535]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4352,
                      "name": "Observation",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4184,
                      "src": "5736:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                        "typeString": "struct Oracle.Observation"
                      }
                    },
                    "id": 4354,
                    "length": {
                      "hexValue": "3635353335",
                      "id": 4353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5748:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65535_by_1",
                        "typeString": "int_const 65535"
                      },
                      "value": "65535"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "5736:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                      "typeString": "struct Oracle.Observation[65535]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4357,
                  "mutability": "mutable",
                  "name": "current",
                  "nodeType": "VariableDeclaration",
                  "scope": 4398,
                  "src": "5777:14:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4356,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5777:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4359,
                  "mutability": "mutable",
                  "name": "next",
                  "nodeType": "VariableDeclaration",
                  "scope": 4398,
                  "src": "5801:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4358,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5801:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5726:92:23"
            },
            "returnParameters": {
              "id": 4363,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4362,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4398,
                  "src": "5837:6:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4361,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "5837:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5836:8:23"
            },
            "scope": 4907,
            "src": "5713:549:23",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4452,
              "nodeType": "Block",
              "src": "6800:267:23",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 4412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4410,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "6874:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "id": 4411,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4401,
                        "src": "6879:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "6874:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 4415,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4413,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "6887:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "id": 4414,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4401,
                        "src": "6892:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "6887:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6874:22:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4421,
                  "nodeType": "IfStatement",
                  "src": "6870:41:23",
                  "trueBody": {
                    "expression": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 4419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4417,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "6905:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "id": 4418,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "6910:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "6905:6:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "functionReturnParameters": 4409,
                    "id": 4420,
                    "nodeType": "Return",
                    "src": "6898:13:23"
                  }
                },
                {
                  "assignments": [
                    4423
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4423,
                      "mutability": "mutable",
                      "name": "aAdjusted",
                      "nodeType": "VariableDeclaration",
                      "scope": 4452,
                      "src": "6922:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4422,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6922:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4434,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 4426,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4424,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "6942:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 4425,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4401,
                        "src": "6946:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "6942:8:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "id": 4432,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4428,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4403,
                        "src": "6957:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_rational_4294967296_by_1",
                          "typeString": "int_const 4294967296"
                        },
                        "id": 4431,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "hexValue": "32",
                          "id": 4429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6961:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "hexValue": "3332",
                          "id": 4430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6964:2:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "32"
                        },
                        "src": "6961:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967296_by_1",
                          "typeString": "int_const 4294967296"
                        }
                      },
                      "src": "6957:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "id": 4433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6942:24:23",
                    "trueExpression": {
                      "id": 4427,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4403,
                      "src": "6953:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6922:44:23"
                },
                {
                  "assignments": [
                    4436
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4436,
                      "mutability": "mutable",
                      "name": "bAdjusted",
                      "nodeType": "VariableDeclaration",
                      "scope": 4452,
                      "src": "6976:17:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4435,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6976:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4447,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 4439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4437,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "6996:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 4438,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4401,
                        "src": "7000:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "6996:8:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "id": 4445,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4441,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4405,
                        "src": "7011:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_rational_4294967296_by_1",
                          "typeString": "int_const 4294967296"
                        },
                        "id": 4444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "hexValue": "32",
                          "id": 4442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7015:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "hexValue": "3332",
                          "id": 4443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7018:2:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_32_by_1",
                            "typeString": "int_const 32"
                          },
                          "value": "32"
                        },
                        "src": "7015:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967296_by_1",
                          "typeString": "int_const 4294967296"
                        }
                      },
                      "src": "7011:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "id": 4446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "6996:24:23",
                    "trueExpression": {
                      "id": 4440,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4405,
                      "src": "7007:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6976:44:23"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4448,
                      "name": "aAdjusted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4423,
                      "src": "7038:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 4449,
                      "name": "bAdjusted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4436,
                      "src": "7051:9:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7038:22:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4409,
                  "id": 4451,
                  "nodeType": "Return",
                  "src": "7031:29:23"
                }
              ]
            },
            "documentation": {
              "id": 4399,
              "nodeType": "StructuredDocumentation",
              "src": "6268:423:23",
              "text": "@notice comparator for 32-bit timestamps\n @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time\n @param time A timestamp truncated to 32 bits\n @param a A comparison timestamp from which to determine the relative position of `time`\n @param b From which to determine the relative position of `time`\n @return bool Whether `a` is chronologically <= `b`"
            },
            "id": 4453,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lte",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4401,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "6718:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4400,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6718:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4403,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "6739:8:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4402,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6739:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4405,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "6757:8:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4404,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6757:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6708:63:23"
            },
            "returnParameters": {
              "id": 4409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4408,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4453,
                  "src": "6794:4:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4407,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6794:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6793:6:23"
            },
            "scope": 4907,
            "src": "6696:371:23",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 4570,
              "nodeType": "Block",
              "src": "8268:818:23",
              "statements": [
                {
                  "assignments": [
                    4474
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4474,
                      "mutability": "mutable",
                      "name": "l",
                      "nodeType": "VariableDeclaration",
                      "scope": 4570,
                      "src": "8278:9:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4473,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8278:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4481,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    },
                    "id": 4480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "id": 4477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4475,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4464,
                            "src": "8291:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 4476,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8299:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "8291:9:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        }
                      ],
                      "id": 4478,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "8290:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "id": 4479,
                      "name": "cardinality",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4466,
                      "src": "8304:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "8290:25:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8278:37:23"
                },
                {
                  "assignments": [
                    4483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4483,
                      "mutability": "mutable",
                      "name": "r",
                      "nodeType": "VariableDeclaration",
                      "scope": 4570,
                      "src": "8347:9:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4482,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8347:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4489,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4484,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4474,
                        "src": "8359:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 4485,
                        "name": "cardinality",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4466,
                        "src": "8363:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "src": "8359:15:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 4487,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8377:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "8359:19:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8347:31:23"
                },
                {
                  "assignments": [
                    4491
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4491,
                      "mutability": "mutable",
                      "name": "i",
                      "nodeType": "VariableDeclaration",
                      "scope": 4570,
                      "src": "8410:9:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4490,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8410:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4492,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8410:9:23"
                },
                {
                  "body": {
                    "id": 4568,
                    "nodeType": "Block",
                    "src": "8442:638:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 4501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4494,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4491,
                            "src": "8456:1:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4495,
                                    "name": "l",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4474,
                                    "src": "8461:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 4496,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4483,
                                    "src": "8465:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "8461:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 4498,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "8460:7:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 4499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8470:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "8460:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8456:15:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4502,
                        "nodeType": "ExpressionStatement",
                        "src": "8456:15:23"
                      },
                      {
                        "expression": {
                          "id": 4509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4503,
                            "name": "beforeOrAt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4469,
                            "src": "8486:10:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                              "typeString": "struct Oracle.Observation memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 4504,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4458,
                              "src": "8499:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                                "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                              }
                            },
                            "id": 4508,
                            "indexExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4507,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4505,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4491,
                                "src": "8504:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "id": 4506,
                                "name": "cardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4466,
                                "src": "8508:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "8504:15:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8499:21:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_storage",
                              "typeString": "struct Oracle.Observation storage ref"
                            }
                          },
                          "src": "8486:34:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                            "typeString": "struct Oracle.Observation memory"
                          }
                        },
                        "id": 4510,
                        "nodeType": "ExpressionStatement",
                        "src": "8486:34:23"
                      },
                      {
                        "condition": {
                          "id": 4513,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "8631:23:23",
                          "subExpression": {
                            "expression": {
                              "id": 4511,
                              "name": "beforeOrAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4469,
                              "src": "8632:10:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                "typeString": "struct Oracle.Observation memory"
                              }
                            },
                            "id": 4512,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "initialized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4183,
                            "src": "8632:22:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4522,
                        "nodeType": "IfStatement",
                        "src": "8627:97:23",
                        "trueBody": {
                          "id": 4521,
                          "nodeType": "Block",
                          "src": "8656:68:23",
                          "statements": [
                            {
                              "expression": {
                                "id": 4518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 4514,
                                  "name": "l",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4474,
                                  "src": "8674:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4517,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 4515,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4491,
                                    "src": "8678:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 4516,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8682:1:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "8678:5:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8674:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4519,
                              "nodeType": "ExpressionStatement",
                              "src": "8674:9:23"
                            },
                            {
                              "id": 4520,
                              "nodeType": "Continue",
                              "src": "8701:8:23"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 4532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4523,
                            "name": "atOrAfter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4471,
                            "src": "8738:9:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                              "typeString": "struct Oracle.Observation memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 4524,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4458,
                              "src": "8750:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                                "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                              }
                            },
                            "id": 4531,
                            "indexExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4527,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4525,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4491,
                                      "src": "8756:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 4526,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8760:1:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "8756:5:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4528,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8755:7:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "id": 4529,
                                "name": "cardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4466,
                                "src": "8765:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "src": "8755:21:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8750:27:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_storage",
                              "typeString": "struct Oracle.Observation storage ref"
                            }
                          },
                          "src": "8738:39:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                            "typeString": "struct Oracle.Observation memory"
                          }
                        },
                        "id": 4533,
                        "nodeType": "ExpressionStatement",
                        "src": "8738:39:23"
                      },
                      {
                        "assignments": [
                          4535
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4535,
                            "mutability": "mutable",
                            "name": "targetAtOrAfter",
                            "nodeType": "VariableDeclaration",
                            "scope": 4568,
                            "src": "8792:20:23",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4534,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "8792:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4542,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 4537,
                              "name": "time",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4460,
                              "src": "8819:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "expression": {
                                "id": 4538,
                                "name": "beforeOrAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4469,
                                "src": "8825:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4539,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "blockTimestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4177,
                              "src": "8825:25:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 4540,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4462,
                              "src": "8852:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 4536,
                            "name": "lte",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4453,
                            "src": "8815:3:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$",
                              "typeString": "function (uint32,uint32,uint32) pure returns (bool)"
                            }
                          },
                          "id": 4541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8815:44:23",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8792:67:23"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4543,
                            "name": "targetAtOrAfter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4535,
                            "src": "8926:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 4545,
                                "name": "time",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4460,
                                "src": "8949:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "id": 4546,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4462,
                                "src": "8955:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "expression": {
                                  "id": 4547,
                                  "name": "atOrAfter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4471,
                                  "src": "8963:9:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                    "typeString": "struct Oracle.Observation memory"
                                  }
                                },
                                "id": 4548,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "blockTimestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4177,
                                "src": "8963:24:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 4544,
                              "name": "lte",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4453,
                              "src": "8945:3:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$",
                                "typeString": "function (uint32,uint32,uint32) pure returns (bool)"
                              }
                            },
                            "id": 4549,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8945:43:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8926:62:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4552,
                        "nodeType": "IfStatement",
                        "src": "8922:73:23",
                        "trueBody": {
                          "id": 4551,
                          "nodeType": "Break",
                          "src": "8990:5:23"
                        }
                      },
                      {
                        "condition": {
                          "id": 4554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9014:16:23",
                          "subExpression": {
                            "id": 4553,
                            "name": "targetAtOrAfter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4535,
                            "src": "9015:15:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "id": 4565,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4561,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4474,
                              "src": "9060:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4562,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4491,
                                "src": "9064:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 4563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9068:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "9064:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9060:9:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4566,
                          "nodeType": "ExpressionStatement",
                          "src": "9060:9:23"
                        },
                        "id": 4567,
                        "nodeType": "IfStatement",
                        "src": "9010:59:23",
                        "trueBody": {
                          "expression": {
                            "id": 4559,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4555,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4483,
                              "src": "9032:1:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4558,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4556,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4491,
                                "src": "9036:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 4557,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9040:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "9036:5:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9032:9:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4560,
                          "nodeType": "ExpressionStatement",
                          "src": "9032:9:23"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "hexValue": "74727565",
                    "id": 4493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8436:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "id": 4569,
                  "nodeType": "WhileStatement",
                  "src": "8429:651:23"
                }
              ]
            },
            "documentation": {
              "id": 4454,
              "nodeType": "StructuredDocumentation",
              "src": "7073:944:23",
              "text": "@notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied.\n The result may be the same observation, or adjacent observations.\n @dev The answer must be contained in the array, used when the target is located within the stored observation\n boundaries: older than the most recent observation and younger, or the same age as, the oldest observation\n @param self The stored oracle array\n @param time The current block.timestamp\n @param target The timestamp at which the reserved observation should be for\n @param index The index of the observation that was most recently written to the observations array\n @param cardinality The number of populated elements in the oracle array\n @return beforeOrAt The observation recorded before, or at, the target\n @return atOrAfter The observation recorded at, or after, the target"
            },
            "id": 4571,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "binarySearch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4467,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4458,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "8053:31:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                    "typeString": "struct Oracle.Observation[65535]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4455,
                      "name": "Observation",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4184,
                      "src": "8053:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                        "typeString": "struct Oracle.Observation"
                      }
                    },
                    "id": 4457,
                    "length": {
                      "hexValue": "3635353335",
                      "id": 4456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8065:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65535_by_1",
                        "typeString": "int_const 65535"
                      },
                      "value": "65535"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "8053:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                      "typeString": "struct Oracle.Observation[65535]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4460,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "8094:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4459,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8094:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4462,
                  "mutability": "mutable",
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "8115:13:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4461,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8115:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4464,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "8138:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4463,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "8138:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4466,
                  "mutability": "mutable",
                  "name": "cardinality",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "8160:18:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4465,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "8160:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8043:141:23"
            },
            "returnParameters": {
              "id": 4472,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4469,
                  "mutability": "mutable",
                  "name": "beforeOrAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "8207:29:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                    "typeString": "struct Oracle.Observation"
                  },
                  "typeName": {
                    "id": 4468,
                    "name": "Observation",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4184,
                    "src": "8207:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                      "typeString": "struct Oracle.Observation"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4471,
                  "mutability": "mutable",
                  "name": "atOrAfter",
                  "nodeType": "VariableDeclaration",
                  "scope": 4571,
                  "src": "8238:28:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                    "typeString": "struct Oracle.Observation"
                  },
                  "typeName": {
                    "id": 4470,
                    "name": "Observation",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4184,
                    "src": "8238:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                      "typeString": "struct Oracle.Observation"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8206:61:23"
            },
            "scope": 4907,
            "src": "8022:1064:23",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 4668,
              "nodeType": "Block",
              "src": "10417:1118:23",
              "statements": [
                {
                  "expression": {
                    "id": 4599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4595,
                      "name": "beforeOrAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4591,
                      "src": "10490:10:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 4596,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4576,
                        "src": "10503:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        }
                      },
                      "id": 4598,
                      "indexExpression": {
                        "id": 4597,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4584,
                        "src": "10508:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10503:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage",
                        "typeString": "struct Oracle.Observation storage ref"
                      }
                    },
                    "src": "10490:24:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                      "typeString": "struct Oracle.Observation memory"
                    }
                  },
                  "id": 4600,
                  "nodeType": "ExpressionStatement",
                  "src": "10490:24:23"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 4602,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4578,
                        "src": "10633:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "expression": {
                          "id": 4603,
                          "name": "beforeOrAt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4591,
                          "src": "10639:10:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                            "typeString": "struct Oracle.Observation memory"
                          }
                        },
                        "id": 4604,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "blockTimestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4177,
                        "src": "10639:25:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 4605,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4580,
                        "src": "10666:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 4601,
                      "name": "lte",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4453,
                      "src": "10629:3:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$",
                        "typeString": "function (uint32,uint32,uint32) pure returns (bool)"
                      }
                    },
                    "id": 4606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10629:44:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4628,
                  "nodeType": "IfStatement",
                  "src": "10625:443:23",
                  "trueBody": {
                    "id": 4627,
                    "nodeType": "Block",
                    "src": "10675:393:23",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 4610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4607,
                              "name": "beforeOrAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4591,
                              "src": "10693:10:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                "typeString": "struct Oracle.Observation memory"
                              }
                            },
                            "id": 4608,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "blockTimestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4177,
                            "src": "10693:25:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 4609,
                            "name": "target",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4580,
                            "src": "10722:6:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "10693:35:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4625,
                          "nodeType": "Block",
                          "src": "10907:151:23",
                          "statements": [
                            {
                              "expression": {
                                "components": [
                                  {
                                    "id": 4616,
                                    "name": "beforeOrAt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4591,
                                    "src": "10984:10:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                      "typeString": "struct Oracle.Observation memory"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 4618,
                                        "name": "beforeOrAt",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4591,
                                        "src": "11006:10:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                          "typeString": "struct Oracle.Observation memory"
                                        }
                                      },
                                      {
                                        "id": 4619,
                                        "name": "target",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4580,
                                        "src": "11018:6:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      {
                                        "id": 4620,
                                        "name": "tick",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4582,
                                        "src": "11026:4:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        }
                                      },
                                      {
                                        "id": 4621,
                                        "name": "liquidity",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4586,
                                        "src": "11032:9:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                          "typeString": "struct Oracle.Observation memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        },
                                        {
                                          "typeIdentifier": "t_int24",
                                          "typeString": "int24"
                                        },
                                        {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      ],
                                      "id": 4617,
                                      "name": "transform",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4239,
                                      "src": "10996:9:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_struct$_Observation_$4184_memory_ptr_$_t_uint32_$_t_int24_$_t_uint128_$returns$_t_struct$_Observation_$4184_memory_ptr_$",
                                        "typeString": "function (struct Oracle.Observation memory,uint32,int24,uint128) pure returns (struct Oracle.Observation memory)"
                                      }
                                    },
                                    "id": 4622,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10996:46:23",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                      "typeString": "struct Oracle.Observation memory"
                                    }
                                  }
                                ],
                                "id": 4623,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "10983:60:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_struct$_Observation_$4184_memory_ptr_$_t_struct$_Observation_$4184_memory_ptr_$",
                                  "typeString": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)"
                                }
                              },
                              "functionReturnParameters": 4594,
                              "id": 4624,
                              "nodeType": "Return",
                              "src": "10976:67:23"
                            }
                          ]
                        },
                        "id": 4626,
                        "nodeType": "IfStatement",
                        "src": "10689:369:23",
                        "trueBody": {
                          "id": 4615,
                          "nodeType": "Block",
                          "src": "10730:171:23",
                          "statements": [
                            {
                              "expression": {
                                "components": [
                                  {
                                    "id": 4611,
                                    "name": "beforeOrAt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4591,
                                    "src": "10864:10:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                      "typeString": "struct Oracle.Observation memory"
                                    }
                                  },
                                  {
                                    "id": 4612,
                                    "name": "atOrAfter",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4593,
                                    "src": "10876:9:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                      "typeString": "struct Oracle.Observation memory"
                                    }
                                  }
                                ],
                                "id": 4613,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "10863:23:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_struct$_Observation_$4184_memory_ptr_$_t_struct$_Observation_$4184_memory_ptr_$",
                                  "typeString": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)"
                                }
                              },
                              "functionReturnParameters": 4594,
                              "id": 4614,
                              "nodeType": "Return",
                              "src": "10856:30:23"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 4638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4629,
                      "name": "beforeOrAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4591,
                      "src": "11131:10:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 4630,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4576,
                        "src": "11144:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        }
                      },
                      "id": 4637,
                      "indexExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 4636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "id": 4633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4631,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4584,
                                "src": "11150:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 4632,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11158:1:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "11150:9:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "id": 4634,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "11149:11:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "%",
                        "rightExpression": {
                          "id": 4635,
                          "name": "cardinality",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4588,
                          "src": "11163:11:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "11149:25:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "11144:31:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage",
                        "typeString": "struct Oracle.Observation storage ref"
                      }
                    },
                    "src": "11131:44:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                      "typeString": "struct Oracle.Observation memory"
                    }
                  },
                  "id": 4639,
                  "nodeType": "ExpressionStatement",
                  "src": "11131:44:23"
                },
                {
                  "condition": {
                    "id": 4642,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "11189:23:23",
                    "subExpression": {
                      "expression": {
                        "id": 4640,
                        "name": "beforeOrAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4591,
                        "src": "11190:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                          "typeString": "struct Oracle.Observation memory"
                        }
                      },
                      "id": 4641,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialized",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4183,
                      "src": "11190:22:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4649,
                  "nodeType": "IfStatement",
                  "src": "11185:49:23",
                  "trueBody": {
                    "expression": {
                      "id": 4647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 4643,
                        "name": "beforeOrAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4591,
                        "src": "11214:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                          "typeString": "struct Oracle.Observation memory"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "baseExpression": {
                          "id": 4644,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4576,
                          "src": "11227:4:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                            "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                          }
                        },
                        "id": 4646,
                        "indexExpression": {
                          "hexValue": "30",
                          "id": 4645,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11232:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "11227:7:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_storage",
                          "typeString": "struct Oracle.Observation storage ref"
                        }
                      },
                      "src": "11214:20:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation memory"
                      }
                    },
                    "id": 4648,
                    "nodeType": "ExpressionStatement",
                    "src": "11214:20:23"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4652,
                            "name": "time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4578,
                            "src": "11345:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "expression": {
                              "id": 4653,
                              "name": "beforeOrAt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4591,
                              "src": "11351:10:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                "typeString": "struct Oracle.Observation memory"
                              }
                            },
                            "id": 4654,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "blockTimestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4177,
                            "src": "11351:25:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 4655,
                            "name": "target",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4580,
                            "src": "11378:6:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 4651,
                          "name": "lte",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4453,
                          "src": "11341:3:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$_t_uint32_$returns$_t_bool_$",
                            "typeString": "function (uint32,uint32,uint32) pure returns (bool)"
                          }
                        },
                        "id": 4656,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11341:44:23",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f4c44",
                        "id": 4657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11387:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d30c0d219016dd7e5cf2b2c30c4d7c091820fc329f335b57cab26b9ff3384a9e",
                          "typeString": "literal_string \"OLD\""
                        },
                        "value": "OLD"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d30c0d219016dd7e5cf2b2c30c4d7c091820fc329f335b57cab26b9ff3384a9e",
                          "typeString": "literal_string \"OLD\""
                        }
                      ],
                      "id": 4650,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11333:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4658,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11333:60:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4659,
                  "nodeType": "ExpressionStatement",
                  "src": "11333:60:23"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4661,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4576,
                        "src": "11489:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        }
                      },
                      {
                        "id": 4662,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4578,
                        "src": "11495:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 4663,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4580,
                        "src": "11501:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 4664,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4584,
                        "src": "11509:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "id": 4665,
                        "name": "cardinality",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4588,
                        "src": "11516:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 4660,
                      "name": "binarySearch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4571,
                      "src": "11476:12:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr_$_t_uint32_$_t_uint32_$_t_uint16_$_t_uint16_$returns$_t_struct$_Observation_$4184_memory_ptr_$_t_struct$_Observation_$4184_memory_ptr_$",
                        "typeString": "function (struct Oracle.Observation storage ref[65535] storage pointer,uint32,uint32,uint16,uint16) view returns (struct Oracle.Observation memory,struct Oracle.Observation memory)"
                      }
                    },
                    "id": 4666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11476:52:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_struct$_Observation_$4184_memory_ptr_$_t_struct$_Observation_$4184_memory_ptr_$",
                      "typeString": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)"
                    }
                  },
                  "functionReturnParameters": 4594,
                  "id": 4667,
                  "nodeType": "Return",
                  "src": "11469:59:23"
                }
              ]
            },
            "documentation": {
              "id": 4572,
              "nodeType": "StructuredDocumentation",
              "src": "9092:1013:23",
              "text": "@notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied\n @dev Assumes there is at least 1 initialized observation.\n Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp.\n @param self The stored oracle array\n @param time The current block.timestamp\n @param target The timestamp at which the reserved observation should be for\n @param tick The active tick at the time of the returned or simulated observation\n @param index The index of the observation that was most recently written to the observations array\n @param liquidity The total pool liquidity at the time of the call\n @param cardinality The number of populated elements in the oracle array\n @return beforeOrAt The observation which occurred at, or before, the given timestamp\n @return atOrAfter The observation which occurred at, or after, the given timestamp"
            },
            "id": 4669,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getSurroundingObservations",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4589,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4576,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10155:31:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                    "typeString": "struct Oracle.Observation[65535]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4573,
                      "name": "Observation",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4184,
                      "src": "10155:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                        "typeString": "struct Oracle.Observation"
                      }
                    },
                    "id": 4575,
                    "length": {
                      "hexValue": "3635353335",
                      "id": 4574,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10167:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65535_by_1",
                        "typeString": "int_const 65535"
                      },
                      "value": "65535"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "10155:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                      "typeString": "struct Oracle.Observation[65535]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4578,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10196:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4577,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10196:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4580,
                  "mutability": "mutable",
                  "name": "target",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10217:13:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4579,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10217:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4582,
                  "mutability": "mutable",
                  "name": "tick",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10240:10:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4581,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "10240:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4584,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10260:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4583,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "10260:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4586,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10282:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 4585,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "10282:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4588,
                  "mutability": "mutable",
                  "name": "cardinality",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10309:18:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4587,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "10309:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10145:188:23"
            },
            "returnParameters": {
              "id": 4594,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4591,
                  "mutability": "mutable",
                  "name": "beforeOrAt",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10356:29:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                    "typeString": "struct Oracle.Observation"
                  },
                  "typeName": {
                    "id": 4590,
                    "name": "Observation",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4184,
                    "src": "10356:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                      "typeString": "struct Oracle.Observation"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4593,
                  "mutability": "mutable",
                  "name": "atOrAfter",
                  "nodeType": "VariableDeclaration",
                  "scope": 4669,
                  "src": "10387:28:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                    "typeString": "struct Oracle.Observation"
                  },
                  "typeName": {
                    "id": 4592,
                    "name": "Observation",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4184,
                    "src": "10387:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                      "typeString": "struct Oracle.Observation"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10355:61:23"
            },
            "scope": 4907,
            "src": "10110:1425:23",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 4819,
              "nodeType": "Block",
              "src": "12949:1640:23",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 4695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4693,
                      "name": "secondsAgo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4678,
                      "src": "12963:10:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4694,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12977:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12963:15:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4723,
                  "nodeType": "IfStatement",
                  "src": "12959:257:23",
                  "trueBody": {
                    "id": 4722,
                    "nodeType": "Block",
                    "src": "12980:236:23",
                    "statements": [
                      {
                        "assignments": [
                          4697
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4697,
                            "mutability": "mutable",
                            "name": "last",
                            "nodeType": "VariableDeclaration",
                            "scope": 4722,
                            "src": "12994:23:23",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                              "typeString": "struct Oracle.Observation"
                            },
                            "typeName": {
                              "id": 4696,
                              "name": "Observation",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4184,
                              "src": "12994:11:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                                "typeString": "struct Oracle.Observation"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4701,
                        "initialValue": {
                          "baseExpression": {
                            "id": 4698,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4674,
                            "src": "13020:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                              "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                            }
                          },
                          "id": 4700,
                          "indexExpression": {
                            "id": 4699,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4682,
                            "src": "13025:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13020:11:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Observation_$4184_storage",
                            "typeString": "struct Oracle.Observation storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12994:37:23"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 4705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4702,
                              "name": "last",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4697,
                              "src": "13049:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                "typeString": "struct Oracle.Observation memory"
                              }
                            },
                            "id": 4703,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "blockTimestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4177,
                            "src": "13049:19:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 4704,
                            "name": "time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4676,
                            "src": "13072:4:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "13049:27:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4715,
                        "nodeType": "IfStatement",
                        "src": "13045:78:23",
                        "trueBody": {
                          "expression": {
                            "id": 4713,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 4706,
                              "name": "last",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4697,
                              "src": "13078:4:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                "typeString": "struct Oracle.Observation memory"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "arguments": [
                                {
                                  "id": 4708,
                                  "name": "last",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4697,
                                  "src": "13095:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                    "typeString": "struct Oracle.Observation memory"
                                  }
                                },
                                {
                                  "id": 4709,
                                  "name": "time",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4676,
                                  "src": "13101:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  }
                                },
                                {
                                  "id": 4710,
                                  "name": "tick",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4680,
                                  "src": "13107:4:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  }
                                },
                                {
                                  "id": 4711,
                                  "name": "liquidity",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4684,
                                  "src": "13113:9:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                    "typeString": "struct Oracle.Observation memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  {
                                    "typeIdentifier": "t_int24",
                                    "typeString": "int24"
                                  },
                                  {
                                    "typeIdentifier": "t_uint128",
                                    "typeString": "uint128"
                                  }
                                ],
                                "id": 4707,
                                "name": "transform",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4239,
                                "src": "13085:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_Observation_$4184_memory_ptr_$_t_uint32_$_t_int24_$_t_uint128_$returns$_t_struct$_Observation_$4184_memory_ptr_$",
                                  "typeString": "function (struct Oracle.Observation memory,uint32,int24,uint128) pure returns (struct Oracle.Observation memory)"
                                }
                              },
                              "id": 4712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13085:38:23",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                "typeString": "struct Oracle.Observation memory"
                              }
                            },
                            "src": "13078:45:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                              "typeString": "struct Oracle.Observation memory"
                            }
                          },
                          "id": 4714,
                          "nodeType": "ExpressionStatement",
                          "src": "13078:45:23"
                        }
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "expression": {
                                "id": 4716,
                                "name": "last",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4697,
                                "src": "13145:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4717,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tickCumulative",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4179,
                              "src": "13145:19:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            {
                              "expression": {
                                "id": 4718,
                                "name": "last",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4697,
                                "src": "13166:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4719,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "secondsPerLiquidityCumulativeX128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4181,
                              "src": "13166:38:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "id": 4720,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13144:61:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int56_$_t_uint160_$",
                            "typeString": "tuple(int56,uint160)"
                          }
                        },
                        "functionReturnParameters": 4692,
                        "id": 4721,
                        "nodeType": "Return",
                        "src": "13137:68:23"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4725,
                      "mutability": "mutable",
                      "name": "target",
                      "nodeType": "VariableDeclaration",
                      "scope": 4819,
                      "src": "13226:13:23",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 4724,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13226:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4729,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 4728,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4726,
                      "name": "time",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4676,
                      "src": "13242:4:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 4727,
                      "name": "secondsAgo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4678,
                      "src": "13249:10:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "13242:17:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13226:33:23"
                },
                {
                  "assignments": [
                    4731,
                    4733
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4731,
                      "mutability": "mutable",
                      "name": "beforeOrAt",
                      "nodeType": "VariableDeclaration",
                      "scope": 4819,
                      "src": "13271:29:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation"
                      },
                      "typeName": {
                        "id": 4730,
                        "name": "Observation",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4184,
                        "src": "13271:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                          "typeString": "struct Oracle.Observation"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4733,
                      "mutability": "mutable",
                      "name": "atOrAfter",
                      "nodeType": "VariableDeclaration",
                      "scope": 4819,
                      "src": "13302:28:23",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                        "typeString": "struct Oracle.Observation"
                      },
                      "typeName": {
                        "id": 4732,
                        "name": "Observation",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4184,
                        "src": "13302:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                          "typeString": "struct Oracle.Observation"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4743,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4735,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4674,
                        "src": "13373:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        }
                      },
                      {
                        "id": 4736,
                        "name": "time",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4676,
                        "src": "13379:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 4737,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4725,
                        "src": "13385:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 4738,
                        "name": "tick",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4680,
                        "src": "13393:4:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        }
                      },
                      {
                        "id": 4739,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4682,
                        "src": "13399:5:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "id": 4740,
                        "name": "liquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4684,
                        "src": "13406:9:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "id": 4741,
                        "name": "cardinality",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4686,
                        "src": "13417:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                          "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 4734,
                      "name": "getSurroundingObservations",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4669,
                      "src": "13346:26:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr_$_t_uint32_$_t_uint32_$_t_int24_$_t_uint16_$_t_uint128_$_t_uint16_$returns$_t_struct$_Observation_$4184_memory_ptr_$_t_struct$_Observation_$4184_memory_ptr_$",
                        "typeString": "function (struct Oracle.Observation storage ref[65535] storage pointer,uint32,uint32,int24,uint16,uint128,uint16) view returns (struct Oracle.Observation memory,struct Oracle.Observation memory)"
                      }
                    },
                    "id": 4742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13346:83:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_struct$_Observation_$4184_memory_ptr_$_t_struct$_Observation_$4184_memory_ptr_$",
                      "typeString": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13270:159:23"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 4747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4744,
                      "name": "target",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4725,
                      "src": "13444:6:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 4745,
                        "name": "beforeOrAt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4731,
                        "src": "13454:10:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                          "typeString": "struct Oracle.Observation memory"
                        }
                      },
                      "id": 4746,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "blockTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4177,
                      "src": "13454:25:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "13444:35:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 4758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4755,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4725,
                        "src": "13638:6:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 4756,
                          "name": "atOrAfter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4733,
                          "src": "13648:9:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                            "typeString": "struct Oracle.Observation memory"
                          }
                        },
                        "id": 4757,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "blockTimestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4177,
                        "src": "13648:24:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "13638:34:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 4816,
                      "nodeType": "Block",
                      "src": "13826:757:23",
                      "statements": [
                        {
                          "assignments": [
                            4767
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4767,
                              "mutability": "mutable",
                              "name": "observationTimeDelta",
                              "nodeType": "VariableDeclaration",
                              "scope": 4816,
                              "src": "13875:27:23",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "typeName": {
                                "id": 4766,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "13875:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4773,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "id": 4772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 4768,
                                "name": "atOrAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4733,
                                "src": "13905:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4769,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "blockTimestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4177,
                              "src": "13905:24:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "id": 4770,
                                "name": "beforeOrAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4731,
                                "src": "13932:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4771,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "blockTimestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4177,
                              "src": "13932:25:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "13905:52:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13875:82:23"
                        },
                        {
                          "assignments": [
                            4775
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 4775,
                              "mutability": "mutable",
                              "name": "targetDelta",
                              "nodeType": "VariableDeclaration",
                              "scope": 4816,
                              "src": "13971:18:23",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "typeName": {
                                "id": 4774,
                                "name": "uint32",
                                "nodeType": "ElementaryTypeName",
                                "src": "13971:6:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 4780,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            "id": 4779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4776,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4725,
                              "src": "13992:6:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "id": 4777,
                                "name": "beforeOrAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4731,
                                "src": "14001:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4778,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "blockTimestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4177,
                              "src": "14001:25:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            "src": "13992:34:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13971:55:23"
                        },
                        {
                          "expression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                },
                                "id": 4794,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 4781,
                                    "name": "beforeOrAt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4731,
                                    "src": "14065:10:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                      "typeString": "struct Oracle.Observation memory"
                                    }
                                  },
                                  "id": 4782,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tickCumulative",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4179,
                                  "src": "14065:25:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  },
                                  "id": 4793,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        },
                                        "id": 4790,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              },
                                              "id": 4787,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "expression": {
                                                  "id": 4783,
                                                  "name": "atOrAfter",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 4733,
                                                  "src": "14115:9:23",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                                    "typeString": "struct Oracle.Observation memory"
                                                  }
                                                },
                                                "id": 4784,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "tickCumulative",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 4179,
                                                "src": "14115:24:23",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int56",
                                                  "typeString": "int56"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "expression": {
                                                  "id": 4785,
                                                  "name": "beforeOrAt",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 4731,
                                                  "src": "14142:10:23",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                                    "typeString": "struct Oracle.Observation memory"
                                                  }
                                                },
                                                "id": 4786,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "tickCumulative",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 4179,
                                                "src": "14142:25:23",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_int56",
                                                  "typeString": "int56"
                                                }
                                              },
                                              "src": "14115:52:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              }
                                            }
                                          ],
                                          "id": 4788,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "14114:54:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 4789,
                                          "name": "observationTimeDelta",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4767,
                                          "src": "14171:20:23",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint32",
                                            "typeString": "uint32"
                                          }
                                        },
                                        "src": "14114:77:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int56",
                                          "typeString": "int56"
                                        }
                                      }
                                    ],
                                    "id": 4791,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "14113:79:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int56",
                                      "typeString": "int56"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 4792,
                                    "name": "targetDelta",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4775,
                                    "src": "14215:11:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  },
                                  "src": "14113:113:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  }
                                },
                                "src": "14065:161:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              },
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                "id": 4813,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 4795,
                                    "name": "beforeOrAt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4731,
                                    "src": "14244:10:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                      "typeString": "struct Oracle.Observation memory"
                                    }
                                  },
                                  "id": 4796,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "secondsPerLiquidityCumulativeX128",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4181,
                                  "src": "14244:44:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 4811,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 4808,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "arguments": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint160",
                                                    "typeString": "uint160"
                                                  },
                                                  "id": 4805,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "expression": {
                                                      "id": 4801,
                                                      "name": "atOrAfter",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 4733,
                                                      "src": "14382:9:23",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                                        "typeString": "struct Oracle.Observation memory"
                                                      }
                                                    },
                                                    "id": 4802,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "secondsPerLiquidityCumulativeX128",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 4181,
                                                    "src": "14382:43:23",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint160",
                                                      "typeString": "uint160"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "-",
                                                  "rightExpression": {
                                                    "expression": {
                                                      "id": 4803,
                                                      "name": "beforeOrAt",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 4731,
                                                      "src": "14428:10:23",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                                        "typeString": "struct Oracle.Observation memory"
                                                      }
                                                    },
                                                    "id": 4804,
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "secondsPerLiquidityCumulativeX128",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 4181,
                                                    "src": "14428:44:23",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint160",
                                                      "typeString": "uint160"
                                                    }
                                                  },
                                                  "src": "14382:90:23",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint160",
                                                    "typeString": "uint160"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint160",
                                                    "typeString": "uint160"
                                                  }
                                                ],
                                                "id": 4800,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "14345:7:23",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_uint256_$",
                                                  "typeString": "type(uint256)"
                                                },
                                                "typeName": {
                                                  "id": 4799,
                                                  "name": "uint256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "14345:7:23",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 4806,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "14345:153:23",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "*",
                                            "rightExpression": {
                                              "id": 4807,
                                              "name": "targetDelta",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4775,
                                              "src": "14501:11:23",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint32",
                                                "typeString": "uint32"
                                              }
                                            },
                                            "src": "14345:167:23",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 4809,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "14344:169:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "/",
                                      "rightExpression": {
                                        "id": 4810,
                                        "name": "observationTimeDelta",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4767,
                                        "src": "14516:20:23",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      },
                                      "src": "14344:192:23",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 4798,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "14311:7:23",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint160_$",
                                      "typeString": "type(uint160)"
                                    },
                                    "typeName": {
                                      "id": 4797,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "14311:7:23",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 4812,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14311:247:23",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                },
                                "src": "14244:314:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "id": 4814,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14047:525:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_int56_$_t_uint160_$",
                              "typeString": "tuple(int56,uint160)"
                            }
                          },
                          "functionReturnParameters": 4692,
                          "id": 4815,
                          "nodeType": "Return",
                          "src": "14040:532:23"
                        }
                      ]
                    },
                    "id": 4817,
                    "nodeType": "IfStatement",
                    "src": "13634:949:23",
                    "trueBody": {
                      "id": 4765,
                      "nodeType": "Block",
                      "src": "13674:146:23",
                      "statements": [
                        {
                          "expression": {
                            "components": [
                              {
                                "expression": {
                                  "id": 4759,
                                  "name": "atOrAfter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4733,
                                  "src": "13739:9:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                    "typeString": "struct Oracle.Observation memory"
                                  }
                                },
                                "id": 4760,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "tickCumulative",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4179,
                                "src": "13739:24:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              },
                              {
                                "expression": {
                                  "id": 4761,
                                  "name": "atOrAfter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4733,
                                  "src": "13765:9:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                    "typeString": "struct Oracle.Observation memory"
                                  }
                                },
                                "id": 4762,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "secondsPerLiquidityCumulativeX128",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4181,
                                "src": "13765:43:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "id": 4763,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "13738:71:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_int56_$_t_uint160_$",
                              "typeString": "tuple(int56,uint160)"
                            }
                          },
                          "functionReturnParameters": 4692,
                          "id": 4764,
                          "nodeType": "Return",
                          "src": "13731:78:23"
                        }
                      ]
                    }
                  },
                  "id": 4818,
                  "nodeType": "IfStatement",
                  "src": "13440:1143:23",
                  "trueBody": {
                    "id": 4754,
                    "nodeType": "Block",
                    "src": "13481:147:23",
                    "statements": [
                      {
                        "expression": {
                          "components": [
                            {
                              "expression": {
                                "id": 4748,
                                "name": "beforeOrAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4731,
                                "src": "13545:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4749,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "tickCumulative",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4179,
                              "src": "13545:25:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              }
                            },
                            {
                              "expression": {
                                "id": 4750,
                                "name": "beforeOrAt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4731,
                                "src": "13572:10:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                  "typeString": "struct Oracle.Observation memory"
                                }
                              },
                              "id": 4751,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "secondsPerLiquidityCumulativeX128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4181,
                              "src": "13572:44:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              }
                            }
                          ],
                          "id": 4752,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13544:73:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_int56_$_t_uint160_$",
                            "typeString": "tuple(int56,uint160)"
                          }
                        },
                        "functionReturnParameters": 4692,
                        "id": 4753,
                        "nodeType": "Return",
                        "src": "13537:80:23"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4670,
              "nodeType": "StructuredDocumentation",
              "src": "11541:1100:23",
              "text": "@dev Reverts if an observation at or before the desired observation timestamp does not exist.\n 0 may be passed as `secondsAgo' to return the current cumulative values.\n If called with a timestamp falling between two observations, returns the counterfactual accumulator values\n at exactly the timestamp between the two observations.\n @param self The stored oracle array\n @param time The current block timestamp\n @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation\n @param tick The current tick\n @param index The index of the observation that was most recently written to the observations array\n @param liquidity The current in-range pool liquidity\n @param cardinality The number of populated elements in the oracle array\n @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo`\n @return secondsPerLiquidityCumulativeX128 The time elapsed / max(1, liquidity) since the pool was first initialized, as of `secondsAgo`"
            },
            "id": 4820,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "observeSingle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4674,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12678:31:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                    "typeString": "struct Oracle.Observation[65535]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4671,
                      "name": "Observation",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4184,
                      "src": "12678:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                        "typeString": "struct Oracle.Observation"
                      }
                    },
                    "id": 4673,
                    "length": {
                      "hexValue": "3635353335",
                      "id": 4672,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12690:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65535_by_1",
                        "typeString": "int_const 65535"
                      },
                      "value": "65535"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "12678:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                      "typeString": "struct Oracle.Observation[65535]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4676,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12719:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4675,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12719:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4678,
                  "mutability": "mutable",
                  "name": "secondsAgo",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12740:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4677,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12740:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4680,
                  "mutability": "mutable",
                  "name": "tick",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12767:10:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4679,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "12767:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4682,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12787:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4681,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12787:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4684,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12809:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 4683,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "12809:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4686,
                  "mutability": "mutable",
                  "name": "cardinality",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12836:18:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4685,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "12836:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12668:192:23"
            },
            "returnParameters": {
              "id": 4692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4689,
                  "mutability": "mutable",
                  "name": "tickCumulative",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12884:20:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int56",
                    "typeString": "int56"
                  },
                  "typeName": {
                    "id": 4688,
                    "name": "int56",
                    "nodeType": "ElementaryTypeName",
                    "src": "12884:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int56",
                      "typeString": "int56"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4691,
                  "mutability": "mutable",
                  "name": "secondsPerLiquidityCumulativeX128",
                  "nodeType": "VariableDeclaration",
                  "scope": 4820,
                  "src": "12906:41:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint160",
                    "typeString": "uint160"
                  },
                  "typeName": {
                    "id": 4690,
                    "name": "uint160",
                    "nodeType": "ElementaryTypeName",
                    "src": "12906:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint160",
                      "typeString": "uint160"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12883:65:23"
            },
            "scope": 4907,
            "src": "12646:1943:23",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4905,
              "nodeType": "Block",
              "src": "15870:535:23",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 4850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 4848,
                          "name": "cardinality",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4838,
                          "src": "15888:11:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 4849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15902:1:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "15888:15:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "49",
                        "id": 4851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15905:3:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216",
                          "typeString": "literal_string \"I\""
                        },
                        "value": "I"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216",
                          "typeString": "literal_string \"I\""
                        }
                      ],
                      "id": 4847,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "15880:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15880:29:23",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4853,
                  "nodeType": "ExpressionStatement",
                  "src": "15880:29:23"
                },
                {
                  "expression": {
                    "id": 4861,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4854,
                      "name": "tickCumulatives",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4842,
                      "src": "15920:15:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                        "typeString": "int56[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 4858,
                            "name": "secondsAgos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4830,
                            "src": "15950:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "id": 4859,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "15950:18:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 4857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "15938:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_int56_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) pure returns (int56[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4855,
                            "name": "int56",
                            "nodeType": "ElementaryTypeName",
                            "src": "15942:5:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "id": 4856,
                          "nodeType": "ArrayTypeName",
                          "src": "15942:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                            "typeString": "int56[]"
                          }
                        }
                      },
                      "id": 4860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15938:31:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                        "typeString": "int56[] memory"
                      }
                    },
                    "src": "15920:49:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                      "typeString": "int56[] memory"
                    }
                  },
                  "id": 4862,
                  "nodeType": "ExpressionStatement",
                  "src": "15920:49:23"
                },
                {
                  "expression": {
                    "id": 4870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4863,
                      "name": "secondsPerLiquidityCumulativeX128s",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4845,
                      "src": "15979:34:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                        "typeString": "uint160[] memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 4867,
                            "name": "secondsAgos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4830,
                            "src": "16030:11:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                              "typeString": "uint32[] memory"
                            }
                          },
                          "id": 4868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "16030:18:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 4866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "16016:13:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint160_$dyn_memory_ptr_$",
                          "typeString": "function (uint256) pure returns (uint160[] memory)"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4864,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "16020:7:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "id": 4865,
                          "nodeType": "ArrayTypeName",
                          "src": "16020:9:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                            "typeString": "uint160[]"
                          }
                        }
                      },
                      "id": 4869,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16016:33:23",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                        "typeString": "uint160[] memory"
                      }
                    },
                    "src": "15979:70:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                      "typeString": "uint160[] memory"
                    }
                  },
                  "id": 4871,
                  "nodeType": "ExpressionStatement",
                  "src": "15979:70:23"
                },
                {
                  "body": {
                    "id": 4903,
                    "nodeType": "Block",
                    "src": "16108:291:23",
                    "statements": [
                      {
                        "expression": {
                          "id": 4901,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "components": [
                              {
                                "baseExpression": {
                                  "id": 4883,
                                  "name": "tickCumulatives",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4842,
                                  "src": "16123:15:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                                    "typeString": "int56[] memory"
                                  }
                                },
                                "id": 4885,
                                "indexExpression": {
                                  "id": 4884,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4873,
                                  "src": "16139:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "16123:18:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 4886,
                                  "name": "secondsPerLiquidityCumulativeX128s",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4845,
                                  "src": "16143:34:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                                    "typeString": "uint160[] memory"
                                  }
                                },
                                "id": 4888,
                                "indexExpression": {
                                  "id": 4887,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4873,
                                  "src": "16178:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "16143:37:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "id": 4889,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "16122:59:23",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_int56_$_t_uint160_$",
                              "typeString": "tuple(int56,uint160)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 4891,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4825,
                                "src": "16215:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                                  "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                                }
                              },
                              {
                                "id": 4892,
                                "name": "time",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4827,
                                "src": "16237:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 4893,
                                  "name": "secondsAgos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4830,
                                  "src": "16259:11:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                                    "typeString": "uint32[] memory"
                                  }
                                },
                                "id": 4895,
                                "indexExpression": {
                                  "id": 4894,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4873,
                                  "src": "16271:1:23",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "16259:14:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              },
                              {
                                "id": 4896,
                                "name": "tick",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4832,
                                "src": "16291:4:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 4897,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4834,
                                "src": "16313:5:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              {
                                "id": 4898,
                                "name": "liquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4836,
                                "src": "16336:9:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "id": 4899,
                                "name": "cardinality",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4838,
                                "src": "16363:11:23",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                                  "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "id": 4890,
                              "name": "observeSingle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4820,
                              "src": "16184:13:23",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr_$_t_uint32_$_t_uint32_$_t_int24_$_t_uint16_$_t_uint128_$_t_uint16_$returns$_t_int56_$_t_uint160_$",
                                "typeString": "function (struct Oracle.Observation storage ref[65535] storage pointer,uint32,uint32,int24,uint16,uint128,uint16) view returns (int56,uint160)"
                              }
                            },
                            "id": 4900,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16184:204:23",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_int56_$_t_uint160_$",
                              "typeString": "tuple(int56,uint160)"
                            }
                          },
                          "src": "16122:266:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4902,
                        "nodeType": "ExpressionStatement",
                        "src": "16122:266:23"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4876,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4873,
                      "src": "16079:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 4877,
                        "name": "secondsAgos",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4830,
                        "src": "16083:11:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                          "typeString": "uint32[] memory"
                        }
                      },
                      "id": 4878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16083:18:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16079:22:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4904,
                  "initializationExpression": {
                    "assignments": [
                      4873
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4873,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4904,
                        "src": "16064:9:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4872,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16064:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 4875,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 4874,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16076:1:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "16064:13:23"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 4881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "16103:3:23",
                      "subExpression": {
                        "id": 4880,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4873,
                        "src": "16103:1:23",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4882,
                    "nodeType": "ExpressionStatement",
                    "src": "16103:3:23"
                  },
                  "nodeType": "ForStatement",
                  "src": "16059:340:23"
                }
              ]
            },
            "documentation": {
              "id": 4821,
              "nodeType": "StructuredDocumentation",
              "src": "14595:943:23",
              "text": "@notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos`\n @dev Reverts if `secondsAgos` > oldest observation\n @param self The stored oracle array\n @param time The current block.timestamp\n @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation\n @param tick The current tick\n @param index The index of the observation that was most recently written to the observations array\n @param liquidity The current in-range pool liquidity\n @param cardinality The number of populated elements in the oracle array\n @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo`\n @return secondsPerLiquidityCumulativeX128s The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo`"
            },
            "id": 4906,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "observe",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4839,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4825,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15569:31:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                    "typeString": "struct Oracle.Observation[65535]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4822,
                      "name": "Observation",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4184,
                      "src": "15569:11:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Observation_$4184_storage_ptr",
                        "typeString": "struct Oracle.Observation"
                      }
                    },
                    "id": 4824,
                    "length": {
                      "hexValue": "3635353335",
                      "id": 4823,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15581:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_65535_by_1",
                        "typeString": "int_const 65535"
                      },
                      "value": "65535"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "15569:18:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                      "typeString": "struct Oracle.Observation[65535]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4827,
                  "mutability": "mutable",
                  "name": "time",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15610:11:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 4826,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15610:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4830,
                  "mutability": "mutable",
                  "name": "secondsAgos",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15631:27:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint32_$dyn_memory_ptr",
                    "typeString": "uint32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4828,
                      "name": "uint32",
                      "nodeType": "ElementaryTypeName",
                      "src": "15631:6:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "id": 4829,
                    "nodeType": "ArrayTypeName",
                    "src": "15631:8:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint32_$dyn_storage_ptr",
                      "typeString": "uint32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4832,
                  "mutability": "mutable",
                  "name": "tick",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15668:10:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4831,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "15668:5:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4834,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15688:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4833,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "15688:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4836,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15710:17:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 4835,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "15710:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4838,
                  "mutability": "mutable",
                  "name": "cardinality",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15737:18:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 4837,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "15737:6:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15559:202:23"
            },
            "returnParameters": {
              "id": 4846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4842,
                  "mutability": "mutable",
                  "name": "tickCumulatives",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15785:30:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_int56_$dyn_memory_ptr",
                    "typeString": "int56[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4840,
                      "name": "int56",
                      "nodeType": "ElementaryTypeName",
                      "src": "15785:5:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int56",
                        "typeString": "int56"
                      }
                    },
                    "id": 4841,
                    "nodeType": "ArrayTypeName",
                    "src": "15785:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_int56_$dyn_storage_ptr",
                      "typeString": "int56[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4845,
                  "mutability": "mutable",
                  "name": "secondsPerLiquidityCumulativeX128s",
                  "nodeType": "VariableDeclaration",
                  "scope": 4906,
                  "src": "15817:51:23",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint160_$dyn_memory_ptr",
                    "typeString": "uint160[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4843,
                      "name": "uint160",
                      "nodeType": "ElementaryTypeName",
                      "src": "15817:7:23",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint160",
                        "typeString": "uint160"
                      }
                    },
                    "id": 4844,
                    "nodeType": "ArrayTypeName",
                    "src": "15817:9:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint160_$dyn_storage_ptr",
                      "typeString": "uint160[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15784:85:23"
            },
            "scope": 4907,
            "src": "15543:862:23",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 4908,
        "src": "676:15731:23"
      }
    ],
    "src": "37:16371:23"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Oracle.sol",
      "exportedSymbols": {
        "Oracle": [
          4907
        ]
      },
      "license": "BUSL-1.1"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.5",
            ".0"
          ]
        },
        "id": 4174,
        "name": "PragmaDirective",
        "src": "37:24:23"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            4907
          ],
          "name": "Oracle",
          "scope": 4908
        },
        "children": [
          {
            "attributes": {
              "text": "@title Oracle\n @notice Provides price and liquidity data useful for a wide variety of system designs\n @dev Instances of stored oracle data, \"observations\", are collected in the oracle array\n Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the\n maximum length of the oracle array. New slots will be added when the array is fully populated.\n Observations are overwritten when the full length of the oracle array is populated.\n The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe()"
            },
            "id": 4175,
            "name": "StructuredDocumentation",
            "src": "63:613:23"
          },
          {
            "attributes": {
              "canonicalName": "Oracle.Observation",
              "name": "Observation",
              "scope": 4907,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "blockTimestamp",
                  "scope": 4184,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint32",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint32",
                      "type": "uint32"
                    },
                    "id": 4176,
                    "name": "ElementaryTypeName",
                    "src": "776:6:23"
                  }
                ],
                "id": 4177,
                "name": "VariableDeclaration",
                "src": "776:21:23"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "tickCumulative",
                  "scope": 4184,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "int56",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "int56",
                      "type": "int56"
                    },
                    "id": 4178,
                    "name": "ElementaryTypeName",
                    "src": "902:5:23"
                  }
                ],
                "id": 4179,
                "name": "VariableDeclaration",
                "src": "902:20:23"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "secondsPerLiquidityCumulativeX128",
                  "scope": 4184,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint160",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint160",
                      "type": "uint160"
                    },
                    "id": 4180,
                    "name": "ElementaryTypeName",
                    "src": "1048:7:23"
                  }
                ],
                "id": 4181,
                "name": "VariableDeclaration",
                "src": "1048:41:23"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "initialized",
                  "scope": 4184,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bool",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 4182,
                    "name": "ElementaryTypeName",
                    "src": "1156:4:23"
                  }
                ],
                "id": 4183,
                "name": "VariableDeclaration",
                "src": "1156:16:23"
              }
            ],
            "id": 4184,
            "name": "StructDefinition",
            "src": "697:482:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "transform",
              "scope": 4907,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Transforms a previous observation into a new observation, given the passage of time and the current tick and liquidity values\n @dev blockTimestamp _must_ be chronologically equal to or greater than last.blockTimestamp, safe for 0 or 1 overflows\n @param last The specified observation to be transformed\n @param blockTimestamp The timestamp of the new observation\n @param tick The active tick at the time of the new observation\n @param liquidity The total in-range liquidity at the time of the new observation\n @return Observation The newly populated observation"
                },
                "id": 4185,
                "name": "StructuredDocumentation",
                "src": "1185:614:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "last",
                      "scope": 4239,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct Oracle.Observation",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Observation",
                          "referencedDeclaration": 4184,
                          "type": "struct Oracle.Observation"
                        },
                        "id": 4186,
                        "name": "UserDefinedTypeName",
                        "src": "1832:11:23"
                      }
                    ],
                    "id": 4187,
                    "name": "VariableDeclaration",
                    "src": "1832:23:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "blockTimestamp",
                      "scope": 4239,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4188,
                        "name": "ElementaryTypeName",
                        "src": "1865:6:23"
                      }
                    ],
                    "id": 4189,
                    "name": "VariableDeclaration",
                    "src": "1865:21:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tick",
                      "scope": 4239,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 4190,
                        "name": "ElementaryTypeName",
                        "src": "1896:5:23"
                      }
                    ],
                    "id": 4191,
                    "name": "VariableDeclaration",
                    "src": "1896:10:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 4239,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 4192,
                        "name": "ElementaryTypeName",
                        "src": "1916:7:23"
                      }
                    ],
                    "id": 4193,
                    "name": "VariableDeclaration",
                    "src": "1916:17:23"
                  }
                ],
                "id": 4194,
                "name": "ParameterList",
                "src": "1822:117:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 4239,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct Oracle.Observation",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Observation",
                          "referencedDeclaration": 4184,
                          "type": "struct Oracle.Observation"
                        },
                        "id": 4195,
                        "name": "UserDefinedTypeName",
                        "src": "1962:11:23"
                      }
                    ],
                    "id": 4196,
                    "name": "VariableDeclaration",
                    "src": "1962:18:23"
                  }
                ],
                "id": 4197,
                "name": "ParameterList",
                "src": "1961:20:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4199
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "delta",
                          "scope": 4238,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint32",
                              "type": "uint32"
                            },
                            "id": 4198,
                            "name": "ElementaryTypeName",
                            "src": "1992:6:23"
                          }
                        ],
                        "id": 4199,
                        "name": "VariableDeclaration",
                        "src": "1992:12:23"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "uint32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4189,
                              "type": "uint32",
                              "value": "blockTimestamp"
                            },
                            "id": 4200,
                            "name": "Identifier",
                            "src": "2007:14:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "blockTimestamp",
                              "referencedDeclaration": 4177,
                              "type": "uint32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4187,
                                  "type": "struct Oracle.Observation memory",
                                  "value": "last"
                                },
                                "id": 4201,
                                "name": "Identifier",
                                "src": "2024:4:23"
                              }
                            ],
                            "id": 4202,
                            "name": "MemberAccess",
                            "src": "2024:19:23"
                          }
                        ],
                        "id": 4203,
                        "name": "BinaryOperation",
                        "src": "2007:36:23"
                      }
                    ],
                    "id": 4204,
                    "name": "VariableDeclarationStatement",
                    "src": "1992:51:23"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4197
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": true,
                          "lValueRequested": false,
                          "names": [
                            "blockTimestamp",
                            "tickCumulative",
                            "secondsPerLiquidityCumulativeX128",
                            "initialized"
                          ],
                          "tryCall": false,
                          "type": "struct Oracle.Observation memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_int56",
                                  "typeString": "int56"
                                },
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4184,
                              "type": "type(struct Oracle.Observation storage pointer)",
                              "value": "Observation"
                            },
                            "id": 4205,
                            "name": "Identifier",
                            "src": "2072:11:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4189,
                              "type": "uint32",
                              "value": "blockTimestamp"
                            },
                            "id": 4206,
                            "name": "Identifier",
                            "src": "2118:14:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_int56",
                                "typeString": "int56"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "int56"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tickCumulative",
                                  "referencedDeclaration": 4179,
                                  "type": "int56"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4187,
                                      "type": "struct Oracle.Observation memory",
                                      "value": "last"
                                    },
                                    "id": 4207,
                                    "name": "Identifier",
                                    "src": "2166:4:23"
                                  }
                                ],
                                "id": 4208,
                                "name": "MemberAccess",
                                "src": "2166:19:23"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_int56",
                                    "typeString": "int56"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "*",
                                  "type": "int56"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "int56",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(int56)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "int56"
                                            },
                                            "id": 4209,
                                            "name": "ElementaryTypeName",
                                            "src": "2188:5:23"
                                          }
                                        ],
                                        "id": 4210,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "2188:5:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4191,
                                          "type": "int24",
                                          "value": "tick"
                                        },
                                        "id": 4211,
                                        "name": "Identifier",
                                        "src": "2194:4:23"
                                      }
                                    ],
                                    "id": 4212,
                                    "name": "FunctionCall",
                                    "src": "2188:11:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4199,
                                      "type": "uint32",
                                      "value": "delta"
                                    },
                                    "id": 4213,
                                    "name": "Identifier",
                                    "src": "2202:5:23"
                                  }
                                ],
                                "id": 4214,
                                "name": "BinaryOperation",
                                "src": "2188:19:23"
                              }
                            ],
                            "id": 4215,
                            "name": "BinaryOperation",
                            "src": "2166:41:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint160",
                                "typeString": "uint160"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint160"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "secondsPerLiquidityCumulativeX128",
                                  "referencedDeclaration": 4181,
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4187,
                                      "type": "struct Oracle.Observation memory",
                                      "value": "last"
                                    },
                                    "id": 4216,
                                    "name": "Identifier",
                                    "src": "2260:4:23"
                                  }
                                ],
                                "id": 4217,
                                "name": "MemberAccess",
                                "src": "2260:38:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint160"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint160",
                                        "typeString": "uint160"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "/",
                                      "type": "uint160"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint160"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint160",
                                                "typeString": "uint160"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "<<",
                                              "type": "uint160"
                                            },
                                            "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_uint32",
                                                          "typeString": "uint32"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint160)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "uint160"
                                                        },
                                                        "id": 4218,
                                                        "name": "ElementaryTypeName",
                                                        "src": "2323:7:23"
                                                      }
                                                    ],
                                                    "id": 4219,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "2323:7:23"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4199,
                                                      "type": "uint32",
                                                      "value": "delta"
                                                    },
                                                    "id": 4220,
                                                    "name": "Identifier",
                                                    "src": "2331:5:23"
                                                  }
                                                ],
                                                "id": 4221,
                                                "name": "FunctionCall",
                                                "src": "2323:14:23"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "313238",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 128",
                                                  "value": "128"
                                                },
                                                "id": 4222,
                                                "name": "Literal",
                                                "src": "2341:3:23"
                                              }
                                            ],
                                            "id": 4223,
                                            "name": "BinaryOperation",
                                            "src": "2323:21:23"
                                          }
                                        ],
                                        "id": 4224,
                                        "name": "TupleExpression",
                                        "src": "2322:23:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint128"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint128"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint128",
                                                    "typeString": "uint128"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": ">",
                                                  "type": "bool"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4193,
                                                      "type": "uint128",
                                                      "value": "liquidity"
                                                    },
                                                    "id": 4225,
                                                    "name": "Identifier",
                                                    "src": "2349:9:23"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "hexvalue": "30",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "token": "number",
                                                      "type": "int_const 0",
                                                      "value": "0"
                                                    },
                                                    "id": 4226,
                                                    "name": "Literal",
                                                    "src": "2361:1:23"
                                                  }
                                                ],
                                                "id": 4227,
                                                "name": "BinaryOperation",
                                                "src": "2349:13:23"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4193,
                                                  "type": "uint128",
                                                  "value": "liquidity"
                                                },
                                                "id": 4228,
                                                "name": "Identifier",
                                                "src": "2365:9:23"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 4229,
                                                "name": "Literal",
                                                "src": "2377:1:23"
                                              }
                                            ],
                                            "id": 4230,
                                            "name": "Conditional",
                                            "src": "2349:29:23"
                                          }
                                        ],
                                        "id": 4231,
                                        "name": "TupleExpression",
                                        "src": "2348:31:23"
                                      }
                                    ],
                                    "id": 4232,
                                    "name": "BinaryOperation",
                                    "src": "2322:57:23"
                                  }
                                ],
                                "id": 4233,
                                "name": "TupleExpression",
                                "src": "2321:59:23"
                              }
                            ],
                            "id": 4234,
                            "name": "BinaryOperation",
                            "src": "2260:120:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 4235,
                            "name": "Literal",
                            "src": "2411:4:23"
                          }
                        ],
                        "id": 4236,
                        "name": "FunctionCall",
                        "src": "2072:358:23"
                      }
                    ],
                    "id": 4237,
                    "name": "Return",
                    "src": "2053:377:23"
                  }
                ],
                "id": 4238,
                "name": "Block",
                "src": "1982:455:23"
              }
            ],
            "id": 4239,
            "name": "FunctionDefinition",
            "src": "1804:633:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "initialize",
              "scope": 4907,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Initialize the oracle array by writing the first slot. Called once for the lifecycle of the observations array\n @param self The stored oracle array\n @param time The time of the oracle initialization, via block.timestamp truncated to uint32\n @return cardinality The number of populated elements in the oracle array\n @return cardinalityNext The new length of the oracle array, independent of population"
                },
                "id": 4240,
                "name": "StructuredDocumentation",
                "src": "2443:440:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Oracle.Observation[65535]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "struct Oracle.Observation[65535]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4241,
                            "name": "UserDefinedTypeName",
                            "src": "2908:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3635353335",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 65535",
                              "value": "65535"
                            },
                            "id": 4242,
                            "name": "Literal",
                            "src": "2920:5:23"
                          }
                        ],
                        "id": 4243,
                        "name": "ArrayTypeName",
                        "src": "2908:18:23"
                      }
                    ],
                    "id": 4244,
                    "name": "VariableDeclaration",
                    "src": "2908:31:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "time",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4245,
                        "name": "ElementaryTypeName",
                        "src": "2941:6:23"
                      }
                    ],
                    "id": 4246,
                    "name": "VariableDeclaration",
                    "src": "2941:11:23"
                  }
                ],
                "id": 4247,
                "name": "ParameterList",
                "src": "2907:46:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinality",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4248,
                        "name": "ElementaryTypeName",
                        "src": "2988:6:23"
                      }
                    ],
                    "id": 4249,
                    "name": "VariableDeclaration",
                    "src": "2988:18:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinalityNext",
                      "scope": 4269,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4250,
                        "name": "ElementaryTypeName",
                        "src": "3008:6:23"
                      }
                    ],
                    "id": 4251,
                    "name": "VariableDeclaration",
                    "src": "3008:22:23"
                  }
                ],
                "id": 4252,
                "name": "ParameterList",
                "src": "2987:44:23"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "struct Oracle.Observation storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "struct Oracle.Observation storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4244,
                                  "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                  "value": "self"
                                },
                                "id": 4253,
                                "name": "Identifier",
                                "src": "3046:4:23"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4254,
                                "name": "Literal",
                                "src": "3051:1:23"
                              }
                            ],
                            "id": 4255,
                            "name": "IndexAccess",
                            "src": "3046:7:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": true,
                              "lValueRequested": false,
                              "names": [
                                "blockTimestamp",
                                "tickCumulative",
                                "secondsPerLiquidityCumulativeX128",
                                "initialized"
                              ],
                              "tryCall": false,
                              "type": "struct Oracle.Observation memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4184,
                                  "type": "type(struct Oracle.Observation storage pointer)",
                                  "value": "Observation"
                                },
                                "id": 4256,
                                "name": "Identifier",
                                "src": "3056:11:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4246,
                                  "type": "uint32",
                                  "value": "time"
                                },
                                "id": 4257,
                                "name": "Identifier",
                                "src": "3098:4:23"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4258,
                                "name": "Literal",
                                "src": "3132:1:23"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4259,
                                "name": "Literal",
                                "src": "3182:1:23"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 4260,
                                "name": "Literal",
                                "src": "3210:4:23"
                              }
                            ],
                            "id": 4261,
                            "name": "FunctionCall",
                            "src": "3056:169:23"
                          }
                        ],
                        "id": 4262,
                        "name": "Assignment",
                        "src": "3046:179:23"
                      }
                    ],
                    "id": 4263,
                    "name": "ExpressionStatement",
                    "src": "3046:179:23"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4252
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "type": "tuple(int_const 1,int_const 1)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 4264,
                            "name": "Literal",
                            "src": "3243:1:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 4265,
                            "name": "Literal",
                            "src": "3246:1:23"
                          }
                        ],
                        "id": 4266,
                        "name": "TupleExpression",
                        "src": "3242:6:23"
                      }
                    ],
                    "id": 4267,
                    "name": "Return",
                    "src": "3235:13:23"
                  }
                ],
                "id": 4268,
                "name": "Block",
                "src": "3036:219:23"
              }
            ],
            "id": 4269,
            "name": "FunctionDefinition",
            "src": "2888:367:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "write",
              "scope": 4907,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Writes an oracle observation to the array\n @dev Writable at most once per block. Index represents the most recently written element. cardinality and index must be tracked externally.\n If the index is at the end of the allowable array length (according to cardinality), and the next cardinality\n is greater than the current one, cardinality may be increased. This restriction is created to preserve ordering.\n @param self The stored oracle array\n @param index The index of the observation that was most recently written to the observations array\n @param blockTimestamp The timestamp of the new observation\n @param tick The active tick at the time of the new observation\n @param liquidity The total in-range liquidity at the time of the new observation\n @param cardinality The number of populated elements in the oracle array\n @param cardinalityNext The new length of the oracle array, independent of population\n @return indexUpdated The new index of the most recently written element in the oracle array\n @return cardinalityUpdated The new cardinality of the oracle array"
                },
                "id": 4270,
                "name": "StructuredDocumentation",
                "src": "3261:1166:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Oracle.Observation[65535]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "struct Oracle.Observation[65535]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4271,
                            "name": "UserDefinedTypeName",
                            "src": "4456:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3635353335",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 65535",
                              "value": "65535"
                            },
                            "id": 4272,
                            "name": "Literal",
                            "src": "4468:5:23"
                          }
                        ],
                        "id": 4273,
                        "name": "ArrayTypeName",
                        "src": "4456:18:23"
                      }
                    ],
                    "id": 4274,
                    "name": "VariableDeclaration",
                    "src": "4456:31:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "index",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4275,
                        "name": "ElementaryTypeName",
                        "src": "4497:6:23"
                      }
                    ],
                    "id": 4276,
                    "name": "VariableDeclaration",
                    "src": "4497:12:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "blockTimestamp",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4277,
                        "name": "ElementaryTypeName",
                        "src": "4519:6:23"
                      }
                    ],
                    "id": 4278,
                    "name": "VariableDeclaration",
                    "src": "4519:21:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tick",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 4279,
                        "name": "ElementaryTypeName",
                        "src": "4550:5:23"
                      }
                    ],
                    "id": 4280,
                    "name": "VariableDeclaration",
                    "src": "4550:10:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 4281,
                        "name": "ElementaryTypeName",
                        "src": "4570:7:23"
                      }
                    ],
                    "id": 4282,
                    "name": "VariableDeclaration",
                    "src": "4570:17:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinality",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4283,
                        "name": "ElementaryTypeName",
                        "src": "4597:6:23"
                      }
                    ],
                    "id": 4284,
                    "name": "VariableDeclaration",
                    "src": "4597:18:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinalityNext",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4285,
                        "name": "ElementaryTypeName",
                        "src": "4625:6:23"
                      }
                    ],
                    "id": 4286,
                    "name": "VariableDeclaration",
                    "src": "4625:22:23"
                  }
                ],
                "id": 4287,
                "name": "ParameterList",
                "src": "4446:207:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "indexUpdated",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4288,
                        "name": "ElementaryTypeName",
                        "src": "4672:6:23"
                      }
                    ],
                    "id": 4289,
                    "name": "VariableDeclaration",
                    "src": "4672:19:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinalityUpdated",
                      "scope": 4350,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4290,
                        "name": "ElementaryTypeName",
                        "src": "4693:6:23"
                      }
                    ],
                    "id": 4291,
                    "name": "VariableDeclaration",
                    "src": "4693:25:23"
                  }
                ],
                "id": 4292,
                "name": "ParameterList",
                "src": "4671:48:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4294
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "last",
                          "scope": 4349,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct Oracle.Observation",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4293,
                            "name": "UserDefinedTypeName",
                            "src": "4730:11:23"
                          }
                        ],
                        "id": 4294,
                        "name": "VariableDeclaration",
                        "src": "4730:23:23"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Oracle.Observation storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4274,
                              "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                              "value": "self"
                            },
                            "id": 4295,
                            "name": "Identifier",
                            "src": "4756:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4276,
                              "type": "uint16",
                              "value": "index"
                            },
                            "id": 4296,
                            "name": "Identifier",
                            "src": "4761:5:23"
                          }
                        ],
                        "id": 4297,
                        "name": "IndexAccess",
                        "src": "4756:11:23"
                      }
                    ],
                    "id": 4298,
                    "name": "VariableDeclarationStatement",
                    "src": "4730:37:23"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "blockTimestamp",
                              "referencedDeclaration": 4177,
                              "type": "uint32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294,
                                  "type": "struct Oracle.Observation memory",
                                  "value": "last"
                                },
                                "id": 4299,
                                "name": "Identifier",
                                "src": "4857:4:23"
                              }
                            ],
                            "id": 4300,
                            "name": "MemberAccess",
                            "src": "4857:19:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4278,
                              "type": "uint32",
                              "value": "blockTimestamp"
                            },
                            "id": 4301,
                            "name": "Identifier",
                            "src": "4880:14:23"
                          }
                        ],
                        "id": 4302,
                        "name": "BinaryOperation",
                        "src": "4857:37:23"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 4292
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "tuple(uint16,uint16)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4276,
                                  "type": "uint16",
                                  "value": "index"
                                },
                                "id": 4303,
                                "name": "Identifier",
                                "src": "4904:5:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4284,
                                  "type": "uint16",
                                  "value": "cardinality"
                                },
                                "id": 4304,
                                "name": "Identifier",
                                "src": "4911:11:23"
                              }
                            ],
                            "id": 4305,
                            "name": "TupleExpression",
                            "src": "4903:20:23"
                          }
                        ],
                        "id": 4306,
                        "name": "Return",
                        "src": "4896:27:23"
                      }
                    ],
                    "id": 4307,
                    "name": "IfStatement",
                    "src": "4853:70:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4286,
                                  "type": "uint16",
                                  "value": "cardinalityNext"
                                },
                                "id": 4308,
                                "name": "Identifier",
                                "src": "5006:15:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4284,
                                  "type": "uint16",
                                  "value": "cardinality"
                                },
                                "id": 4309,
                                "name": "Identifier",
                                "src": "5024:11:23"
                              }
                            ],
                            "id": 4310,
                            "name": "BinaryOperation",
                            "src": "5006:29:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4276,
                                  "type": "uint16",
                                  "value": "index"
                                },
                                "id": 4311,
                                "name": "Identifier",
                                "src": "5039:5:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint16"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint16"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4284,
                                          "type": "uint16",
                                          "value": "cardinality"
                                        },
                                        "id": 4312,
                                        "name": "Identifier",
                                        "src": "5049:11:23"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 4313,
                                        "name": "Literal",
                                        "src": "5063:1:23"
                                      }
                                    ],
                                    "id": 4314,
                                    "name": "BinaryOperation",
                                    "src": "5049:15:23"
                                  }
                                ],
                                "id": 4315,
                                "name": "TupleExpression",
                                "src": "5048:17:23"
                              }
                            ],
                            "id": 4316,
                            "name": "BinaryOperation",
                            "src": "5039:26:23"
                          }
                        ],
                        "id": 4317,
                        "name": "BinaryOperation",
                        "src": "5006:59:23"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint16"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4291,
                                      "type": "uint16",
                                      "value": "cardinalityUpdated"
                                    },
                                    "id": 4318,
                                    "name": "Identifier",
                                    "src": "5081:18:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4286,
                                      "type": "uint16",
                                      "value": "cardinalityNext"
                                    },
                                    "id": 4319,
                                    "name": "Identifier",
                                    "src": "5102:15:23"
                                  }
                                ],
                                "id": 4320,
                                "name": "Assignment",
                                "src": "5081:36:23"
                              }
                            ],
                            "id": 4321,
                            "name": "ExpressionStatement",
                            "src": "5081:36:23"
                          }
                        ],
                        "id": 4322,
                        "name": "Block",
                        "src": "5067:61:23"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint16"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4291,
                                      "type": "uint16",
                                      "value": "cardinalityUpdated"
                                    },
                                    "id": 4323,
                                    "name": "Identifier",
                                    "src": "5148:18:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4284,
                                      "type": "uint16",
                                      "value": "cardinality"
                                    },
                                    "id": 4324,
                                    "name": "Identifier",
                                    "src": "5169:11:23"
                                  }
                                ],
                                "id": 4325,
                                "name": "Assignment",
                                "src": "5148:32:23"
                              }
                            ],
                            "id": 4326,
                            "name": "ExpressionStatement",
                            "src": "5148:32:23"
                          }
                        ],
                        "id": 4327,
                        "name": "Block",
                        "src": "5134:57:23"
                      }
                    ],
                    "id": 4328,
                    "name": "IfStatement",
                    "src": "5002:189:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint16"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4289,
                              "type": "uint16",
                              "value": "indexUpdated"
                            },
                            "id": 4329,
                            "name": "Identifier",
                            "src": "5201:12:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "%",
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint16"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint16"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4276,
                                          "type": "uint16",
                                          "value": "index"
                                        },
                                        "id": 4330,
                                        "name": "Identifier",
                                        "src": "5217:5:23"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 4331,
                                        "name": "Literal",
                                        "src": "5225:1:23"
                                      }
                                    ],
                                    "id": 4332,
                                    "name": "BinaryOperation",
                                    "src": "5217:9:23"
                                  }
                                ],
                                "id": 4333,
                                "name": "TupleExpression",
                                "src": "5216:11:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4291,
                                  "type": "uint16",
                                  "value": "cardinalityUpdated"
                                },
                                "id": 4334,
                                "name": "Identifier",
                                "src": "5230:18:23"
                              }
                            ],
                            "id": 4335,
                            "name": "BinaryOperation",
                            "src": "5216:32:23"
                          }
                        ],
                        "id": 4336,
                        "name": "Assignment",
                        "src": "5201:47:23"
                      }
                    ],
                    "id": 4337,
                    "name": "ExpressionStatement",
                    "src": "5201:47:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "struct Oracle.Observation storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "struct Oracle.Observation storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4274,
                                  "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                  "value": "self"
                                },
                                "id": 4338,
                                "name": "Identifier",
                                "src": "5258:4:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4289,
                                  "type": "uint16",
                                  "value": "indexUpdated"
                                },
                                "id": 4339,
                                "name": "Identifier",
                                "src": "5263:12:23"
                              }
                            ],
                            "id": 4340,
                            "name": "IndexAccess",
                            "src": "5258:18:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "struct Oracle.Observation memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                      "typeString": "struct Oracle.Observation memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    },
                                    {
                                      "typeIdentifier": "t_int24",
                                      "typeString": "int24"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4239,
                                  "type": "function (struct Oracle.Observation memory,uint32,int24,uint128) pure returns (struct Oracle.Observation memory)",
                                  "value": "transform"
                                },
                                "id": 4341,
                                "name": "Identifier",
                                "src": "5279:9:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294,
                                  "type": "struct Oracle.Observation memory",
                                  "value": "last"
                                },
                                "id": 4342,
                                "name": "Identifier",
                                "src": "5289:4:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4278,
                                  "type": "uint32",
                                  "value": "blockTimestamp"
                                },
                                "id": 4343,
                                "name": "Identifier",
                                "src": "5295:14:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4280,
                                  "type": "int24",
                                  "value": "tick"
                                },
                                "id": 4344,
                                "name": "Identifier",
                                "src": "5311:4:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4282,
                                  "type": "uint128",
                                  "value": "liquidity"
                                },
                                "id": 4345,
                                "name": "Identifier",
                                "src": "5317:9:23"
                              }
                            ],
                            "id": 4346,
                            "name": "FunctionCall",
                            "src": "5279:48:23"
                          }
                        ],
                        "id": 4347,
                        "name": "Assignment",
                        "src": "5258:69:23"
                      }
                    ],
                    "id": 4348,
                    "name": "ExpressionStatement",
                    "src": "5258:69:23"
                  }
                ],
                "id": 4349,
                "name": "Block",
                "src": "4720:614:23"
              }
            ],
            "id": 4350,
            "name": "FunctionDefinition",
            "src": "4432:902:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "grow",
              "scope": 4907,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Prepares the oracle array to store up to `next` observations\n @param self The stored oracle array\n @param current The current next cardinality of the oracle array\n @param next The proposed next cardinality which will be populated in the oracle array\n @return next The next cardinality which will be populated in the oracle array"
                },
                "id": 4351,
                "name": "StructuredDocumentation",
                "src": "5340:368:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4398,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Oracle.Observation[65535]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "struct Oracle.Observation[65535]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4352,
                            "name": "UserDefinedTypeName",
                            "src": "5736:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3635353335",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 65535",
                              "value": "65535"
                            },
                            "id": 4353,
                            "name": "Literal",
                            "src": "5748:5:23"
                          }
                        ],
                        "id": 4354,
                        "name": "ArrayTypeName",
                        "src": "5736:18:23"
                      }
                    ],
                    "id": 4355,
                    "name": "VariableDeclaration",
                    "src": "5736:31:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "current",
                      "scope": 4398,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4356,
                        "name": "ElementaryTypeName",
                        "src": "5777:6:23"
                      }
                    ],
                    "id": 4357,
                    "name": "VariableDeclaration",
                    "src": "5777:14:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "next",
                      "scope": 4398,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4358,
                        "name": "ElementaryTypeName",
                        "src": "5801:6:23"
                      }
                    ],
                    "id": 4359,
                    "name": "VariableDeclaration",
                    "src": "5801:11:23"
                  }
                ],
                "id": 4360,
                "name": "ParameterList",
                "src": "5726:92:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 4398,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4361,
                        "name": "ElementaryTypeName",
                        "src": "5837:6:23"
                      }
                    ],
                    "id": 4362,
                    "name": "VariableDeclaration",
                    "src": "5837:6:23"
                  }
                ],
                "id": 4363,
                "name": "ParameterList",
                "src": "5836:8:23"
              },
              {
                "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"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216",
                                  "typeString": "literal_string \"I\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4364,
                            "name": "Identifier",
                            "src": "5855:7:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4357,
                                  "type": "uint16",
                                  "value": "current"
                                },
                                "id": 4365,
                                "name": "Identifier",
                                "src": "5863:7:23"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4366,
                                "name": "Literal",
                                "src": "5873:1:23"
                              }
                            ],
                            "id": 4367,
                            "name": "BinaryOperation",
                            "src": "5863:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "49",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"I\"",
                              "value": "I"
                            },
                            "id": 4368,
                            "name": "Literal",
                            "src": "5876:3:23"
                          }
                        ],
                        "id": 4369,
                        "name": "FunctionCall",
                        "src": "5855:25:23"
                      }
                    ],
                    "id": 4370,
                    "name": "ExpressionStatement",
                    "src": "5855:25:23"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4359,
                              "type": "uint16",
                              "value": "next"
                            },
                            "id": 4371,
                            "name": "Identifier",
                            "src": "5978:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4357,
                              "type": "uint16",
                              "value": "current"
                            },
                            "id": 4372,
                            "name": "Identifier",
                            "src": "5986:7:23"
                          }
                        ],
                        "id": 4373,
                        "name": "BinaryOperation",
                        "src": "5978:15:23"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 4363
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4357,
                              "type": "uint16",
                              "value": "current"
                            },
                            "id": 4374,
                            "name": "Identifier",
                            "src": "6002:7:23"
                          }
                        ],
                        "id": 4375,
                        "name": "Return",
                        "src": "5995:14:23"
                      }
                    ],
                    "id": 4376,
                    "name": "IfStatement",
                    "src": "5974:35:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            4378
                          ]
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "scope": 4394,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint16",
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint16",
                                  "type": "uint16"
                                },
                                "id": 4377,
                                "name": "ElementaryTypeName",
                                "src": "6173:6:23"
                              }
                            ],
                            "id": 4378,
                            "name": "VariableDeclaration",
                            "src": "6173:8:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4357,
                              "type": "uint16",
                              "value": "current"
                            },
                            "id": 4379,
                            "name": "Identifier",
                            "src": "6184:7:23"
                          }
                        ],
                        "id": 4380,
                        "name": "VariableDeclarationStatement",
                        "src": "6173:18:23"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4378,
                              "type": "uint16",
                              "value": "i"
                            },
                            "id": 4381,
                            "name": "Identifier",
                            "src": "6193:1:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4359,
                              "type": "uint16",
                              "value": "next"
                            },
                            "id": 4382,
                            "name": "Identifier",
                            "src": "6197:4:23"
                          }
                        ],
                        "id": 4383,
                        "name": "BinaryOperation",
                        "src": "6193:8:23"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4378,
                                  "type": "uint16",
                                  "value": "i"
                                },
                                "id": 4384,
                                "name": "Identifier",
                                "src": "6203:1:23"
                              }
                            ],
                            "id": 4385,
                            "name": "UnaryOperation",
                            "src": "6203:3:23"
                          }
                        ],
                        "id": 4386,
                        "name": "ExpressionStatement",
                        "src": "6203:3:23"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "member_name": "blockTimestamp",
                                  "referencedDeclaration": 4177,
                                  "type": "uint32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "struct Oracle.Observation storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4355,
                                          "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                          "value": "self"
                                        },
                                        "id": 4387,
                                        "name": "Identifier",
                                        "src": "6208:4:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4378,
                                          "type": "uint16",
                                          "value": "i"
                                        },
                                        "id": 4388,
                                        "name": "Identifier",
                                        "src": "6213:1:23"
                                      }
                                    ],
                                    "id": 4389,
                                    "name": "IndexAccess",
                                    "src": "6208:7:23"
                                  }
                                ],
                                "id": 4390,
                                "name": "MemberAccess",
                                "src": "6208:22:23"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 4391,
                                "name": "Literal",
                                "src": "6233:1:23"
                              }
                            ],
                            "id": 4392,
                            "name": "Assignment",
                            "src": "6208:26:23"
                          }
                        ],
                        "id": 4393,
                        "name": "ExpressionStatement",
                        "src": "6208:26:23"
                      }
                    ],
                    "id": 4394,
                    "name": "ForStatement",
                    "src": "6168:66:23"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4363
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 4359,
                          "type": "uint16",
                          "value": "next"
                        },
                        "id": 4395,
                        "name": "Identifier",
                        "src": "6251:4:23"
                      }
                    ],
                    "id": 4396,
                    "name": "Return",
                    "src": "6244:11:23"
                  }
                ],
                "id": 4397,
                "name": "Block",
                "src": "5845:417:23"
              }
            ],
            "id": 4398,
            "name": "FunctionDefinition",
            "src": "5713:549:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "lte",
              "scope": 4907,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice comparator for 32-bit timestamps\n @dev safe for 0 or 1 overflows, a and b _must_ be chronologically before or equal to time\n @param time A timestamp truncated to 32 bits\n @param a A comparison timestamp from which to determine the relative position of `time`\n @param b From which to determine the relative position of `time`\n @return bool Whether `a` is chronologically <= `b`"
                },
                "id": 4399,
                "name": "StructuredDocumentation",
                "src": "6268:423:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "time",
                      "scope": 4453,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4400,
                        "name": "ElementaryTypeName",
                        "src": "6718:6:23"
                      }
                    ],
                    "id": 4401,
                    "name": "VariableDeclaration",
                    "src": "6718:11:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "a",
                      "scope": 4453,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4402,
                        "name": "ElementaryTypeName",
                        "src": "6739:6:23"
                      }
                    ],
                    "id": 4403,
                    "name": "VariableDeclaration",
                    "src": "6739:8:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "b",
                      "scope": 4453,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4404,
                        "name": "ElementaryTypeName",
                        "src": "6757:6:23"
                      }
                    ],
                    "id": 4405,
                    "name": "VariableDeclaration",
                    "src": "6757:8:23"
                  }
                ],
                "id": 4406,
                "name": "ParameterList",
                "src": "6708:63:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 4453,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4407,
                        "name": "ElementaryTypeName",
                        "src": "6794:4:23"
                      }
                    ],
                    "id": 4408,
                    "name": "VariableDeclaration",
                    "src": "6794:4:23"
                  }
                ],
                "id": 4409,
                "name": "ParameterList",
                "src": "6793:6:23"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4403,
                                  "type": "uint32",
                                  "value": "a"
                                },
                                "id": 4410,
                                "name": "Identifier",
                                "src": "6874:1:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4401,
                                  "type": "uint32",
                                  "value": "time"
                                },
                                "id": 4411,
                                "name": "Identifier",
                                "src": "6879:4:23"
                              }
                            ],
                            "id": 4412,
                            "name": "BinaryOperation",
                            "src": "6874:9:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4405,
                                  "type": "uint32",
                                  "value": "b"
                                },
                                "id": 4413,
                                "name": "Identifier",
                                "src": "6887:1:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4401,
                                  "type": "uint32",
                                  "value": "time"
                                },
                                "id": 4414,
                                "name": "Identifier",
                                "src": "6892:4:23"
                              }
                            ],
                            "id": 4415,
                            "name": "BinaryOperation",
                            "src": "6887:9:23"
                          }
                        ],
                        "id": 4416,
                        "name": "BinaryOperation",
                        "src": "6874:22:23"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 4409
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4403,
                                  "type": "uint32",
                                  "value": "a"
                                },
                                "id": 4417,
                                "name": "Identifier",
                                "src": "6905:1:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4405,
                                  "type": "uint32",
                                  "value": "b"
                                },
                                "id": 4418,
                                "name": "Identifier",
                                "src": "6910:1:23"
                              }
                            ],
                            "id": 4419,
                            "name": "BinaryOperation",
                            "src": "6905:6:23"
                          }
                        ],
                        "id": 4420,
                        "name": "Return",
                        "src": "6898:13:23"
                      }
                    ],
                    "id": 4421,
                    "name": "IfStatement",
                    "src": "6870:41:23"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4423
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "aAdjusted",
                          "scope": 4452,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4422,
                            "name": "ElementaryTypeName",
                            "src": "6922:7:23"
                          }
                        ],
                        "id": 4423,
                        "name": "VariableDeclaration",
                        "src": "6922:17:23"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint40"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4403,
                                  "type": "uint32",
                                  "value": "a"
                                },
                                "id": 4424,
                                "name": "Identifier",
                                "src": "6942:1:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4401,
                                  "type": "uint32",
                                  "value": "time"
                                },
                                "id": 4425,
                                "name": "Identifier",
                                "src": "6946:4:23"
                              }
                            ],
                            "id": 4426,
                            "name": "BinaryOperation",
                            "src": "6942:8:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4403,
                              "type": "uint32",
                              "value": "a"
                            },
                            "id": 4427,
                            "name": "Identifier",
                            "src": "6953:1:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint40"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4403,
                                  "type": "uint32",
                                  "value": "a"
                                },
                                "id": 4428,
                                "name": "Identifier",
                                "src": "6957:1:23"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "operator": "**",
                                  "type": "int_const 4294967296"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "hexvalue": "32",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 2",
                                      "value": "2"
                                    },
                                    "id": 4429,
                                    "name": "Literal",
                                    "src": "6961:1:23"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 4430,
                                    "name": "Literal",
                                    "src": "6964:2:23"
                                  }
                                ],
                                "id": 4431,
                                "name": "BinaryOperation",
                                "src": "6961:5:23"
                              }
                            ],
                            "id": 4432,
                            "name": "BinaryOperation",
                            "src": "6957:9:23"
                          }
                        ],
                        "id": 4433,
                        "name": "Conditional",
                        "src": "6942:24:23"
                      }
                    ],
                    "id": 4434,
                    "name": "VariableDeclarationStatement",
                    "src": "6922:44:23"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4436
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "bAdjusted",
                          "scope": 4452,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4435,
                            "name": "ElementaryTypeName",
                            "src": "6976:7:23"
                          }
                        ],
                        "id": 4436,
                        "name": "VariableDeclaration",
                        "src": "6976:17:23"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint40"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4405,
                                  "type": "uint32",
                                  "value": "b"
                                },
                                "id": 4437,
                                "name": "Identifier",
                                "src": "6996:1:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4401,
                                  "type": "uint32",
                                  "value": "time"
                                },
                                "id": 4438,
                                "name": "Identifier",
                                "src": "7000:4:23"
                              }
                            ],
                            "id": 4439,
                            "name": "BinaryOperation",
                            "src": "6996:8:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4405,
                              "type": "uint32",
                              "value": "b"
                            },
                            "id": 4440,
                            "name": "Identifier",
                            "src": "7007:1:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint40"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4405,
                                  "type": "uint32",
                                  "value": "b"
                                },
                                "id": 4441,
                                "name": "Identifier",
                                "src": "7011:1:23"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "operator": "**",
                                  "type": "int_const 4294967296"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "hexvalue": "32",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 2",
                                      "value": "2"
                                    },
                                    "id": 4442,
                                    "name": "Literal",
                                    "src": "7015:1:23"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 4443,
                                    "name": "Literal",
                                    "src": "7018:2:23"
                                  }
                                ],
                                "id": 4444,
                                "name": "BinaryOperation",
                                "src": "7015:5:23"
                              }
                            ],
                            "id": 4445,
                            "name": "BinaryOperation",
                            "src": "7011:9:23"
                          }
                        ],
                        "id": 4446,
                        "name": "Conditional",
                        "src": "6996:24:23"
                      }
                    ],
                    "id": 4447,
                    "name": "VariableDeclarationStatement",
                    "src": "6976:44:23"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4409
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4423,
                              "type": "uint256",
                              "value": "aAdjusted"
                            },
                            "id": 4448,
                            "name": "Identifier",
                            "src": "7038:9:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4436,
                              "type": "uint256",
                              "value": "bAdjusted"
                            },
                            "id": 4449,
                            "name": "Identifier",
                            "src": "7051:9:23"
                          }
                        ],
                        "id": 4450,
                        "name": "BinaryOperation",
                        "src": "7038:22:23"
                      }
                    ],
                    "id": 4451,
                    "name": "Return",
                    "src": "7031:29:23"
                  }
                ],
                "id": 4452,
                "name": "Block",
                "src": "6800:267:23"
              }
            ],
            "id": 4453,
            "name": "FunctionDefinition",
            "src": "6696:371:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "binarySearch",
              "scope": 4907,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Fetches the observations beforeOrAt and atOrAfter a target, i.e. where [beforeOrAt, atOrAfter] is satisfied.\n The result may be the same observation, or adjacent observations.\n @dev The answer must be contained in the array, used when the target is located within the stored observation\n boundaries: older than the most recent observation and younger, or the same age as, the oldest observation\n @param self The stored oracle array\n @param time The current block.timestamp\n @param target The timestamp at which the reserved observation should be for\n @param index The index of the observation that was most recently written to the observations array\n @param cardinality The number of populated elements in the oracle array\n @return beforeOrAt The observation recorded before, or at, the target\n @return atOrAfter The observation recorded at, or after, the target"
                },
                "id": 4454,
                "name": "StructuredDocumentation",
                "src": "7073:944:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4571,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Oracle.Observation[65535]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "struct Oracle.Observation[65535]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4455,
                            "name": "UserDefinedTypeName",
                            "src": "8053:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3635353335",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 65535",
                              "value": "65535"
                            },
                            "id": 4456,
                            "name": "Literal",
                            "src": "8065:5:23"
                          }
                        ],
                        "id": 4457,
                        "name": "ArrayTypeName",
                        "src": "8053:18:23"
                      }
                    ],
                    "id": 4458,
                    "name": "VariableDeclaration",
                    "src": "8053:31:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "time",
                      "scope": 4571,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4459,
                        "name": "ElementaryTypeName",
                        "src": "8094:6:23"
                      }
                    ],
                    "id": 4460,
                    "name": "VariableDeclaration",
                    "src": "8094:11:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "target",
                      "scope": 4571,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4461,
                        "name": "ElementaryTypeName",
                        "src": "8115:6:23"
                      }
                    ],
                    "id": 4462,
                    "name": "VariableDeclaration",
                    "src": "8115:13:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "index",
                      "scope": 4571,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4463,
                        "name": "ElementaryTypeName",
                        "src": "8138:6:23"
                      }
                    ],
                    "id": 4464,
                    "name": "VariableDeclaration",
                    "src": "8138:12:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinality",
                      "scope": 4571,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4465,
                        "name": "ElementaryTypeName",
                        "src": "8160:6:23"
                      }
                    ],
                    "id": 4466,
                    "name": "VariableDeclaration",
                    "src": "8160:18:23"
                  }
                ],
                "id": 4467,
                "name": "ParameterList",
                "src": "8043:141:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "beforeOrAt",
                      "scope": 4571,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct Oracle.Observation",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Observation",
                          "referencedDeclaration": 4184,
                          "type": "struct Oracle.Observation"
                        },
                        "id": 4468,
                        "name": "UserDefinedTypeName",
                        "src": "8207:11:23"
                      }
                    ],
                    "id": 4469,
                    "name": "VariableDeclaration",
                    "src": "8207:29:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "atOrAfter",
                      "scope": 4571,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct Oracle.Observation",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Observation",
                          "referencedDeclaration": 4184,
                          "type": "struct Oracle.Observation"
                        },
                        "id": 4470,
                        "name": "UserDefinedTypeName",
                        "src": "8238:11:23"
                      }
                    ],
                    "id": 4471,
                    "name": "VariableDeclaration",
                    "src": "8238:28:23"
                  }
                ],
                "id": 4472,
                "name": "ParameterList",
                "src": "8206:61:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4474
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "l",
                          "scope": 4570,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4473,
                            "name": "ElementaryTypeName",
                            "src": "8278:7:23"
                          }
                        ],
                        "id": 4474,
                        "name": "VariableDeclaration",
                        "src": "8278:9:23"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "%",
                          "type": "uint16"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint16"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint16"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4464,
                                      "type": "uint16",
                                      "value": "index"
                                    },
                                    "id": 4475,
                                    "name": "Identifier",
                                    "src": "8291:5:23"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 4476,
                                    "name": "Literal",
                                    "src": "8299:1:23"
                                  }
                                ],
                                "id": 4477,
                                "name": "BinaryOperation",
                                "src": "8291:9:23"
                              }
                            ],
                            "id": 4478,
                            "name": "TupleExpression",
                            "src": "8290:11:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4466,
                              "type": "uint16",
                              "value": "cardinality"
                            },
                            "id": 4479,
                            "name": "Identifier",
                            "src": "8304:11:23"
                          }
                        ],
                        "id": 4480,
                        "name": "BinaryOperation",
                        "src": "8290:25:23"
                      }
                    ],
                    "id": 4481,
                    "name": "VariableDeclarationStatement",
                    "src": "8278:37:23"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4483
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "r",
                          "scope": 4570,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4482,
                            "name": "ElementaryTypeName",
                            "src": "8347:7:23"
                          }
                        ],
                        "id": 4483,
                        "name": "VariableDeclaration",
                        "src": "8347:9:23"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "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": 4474,
                                  "type": "uint256",
                                  "value": "l"
                                },
                                "id": 4484,
                                "name": "Identifier",
                                "src": "8359:1:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4466,
                                  "type": "uint16",
                                  "value": "cardinality"
                                },
                                "id": 4485,
                                "name": "Identifier",
                                "src": "8363:11:23"
                              }
                            ],
                            "id": 4486,
                            "name": "BinaryOperation",
                            "src": "8359:15:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 4487,
                            "name": "Literal",
                            "src": "8377:1:23"
                          }
                        ],
                        "id": 4488,
                        "name": "BinaryOperation",
                        "src": "8359:19:23"
                      }
                    ],
                    "id": 4489,
                    "name": "VariableDeclarationStatement",
                    "src": "8347:31:23"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4491
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "i",
                          "scope": 4570,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4490,
                            "name": "ElementaryTypeName",
                            "src": "8410:7:23"
                          }
                        ],
                        "id": 4491,
                        "name": "VariableDeclaration",
                        "src": "8410:9:23"
                      }
                    ],
                    "id": 4492,
                    "name": "VariableDeclarationStatement",
                    "src": "8410:9:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 4493,
                        "name": "Literal",
                        "src": "8436:4:23"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4491,
                                      "type": "uint256",
                                      "value": "i"
                                    },
                                    "id": 4494,
                                    "name": "Identifier",
                                    "src": "8456:1:23"
                                  },
                                  {
                                    "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": 4474,
                                                  "type": "uint256",
                                                  "value": "l"
                                                },
                                                "id": 4495,
                                                "name": "Identifier",
                                                "src": "8461:1:23"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4483,
                                                  "type": "uint256",
                                                  "value": "r"
                                                },
                                                "id": 4496,
                                                "name": "Identifier",
                                                "src": "8465:1:23"
                                              }
                                            ],
                                            "id": 4497,
                                            "name": "BinaryOperation",
                                            "src": "8461:5:23"
                                          }
                                        ],
                                        "id": 4498,
                                        "name": "TupleExpression",
                                        "src": "8460:7:23"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "32",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 2",
                                          "value": "2"
                                        },
                                        "id": 4499,
                                        "name": "Literal",
                                        "src": "8470:1:23"
                                      }
                                    ],
                                    "id": 4500,
                                    "name": "BinaryOperation",
                                    "src": "8460:11:23"
                                  }
                                ],
                                "id": 4501,
                                "name": "Assignment",
                                "src": "8456:15:23"
                              }
                            ],
                            "id": 4502,
                            "name": "ExpressionStatement",
                            "src": "8456:15:23"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "struct Oracle.Observation memory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4469,
                                      "type": "struct Oracle.Observation memory",
                                      "value": "beforeOrAt"
                                    },
                                    "id": 4503,
                                    "name": "Identifier",
                                    "src": "8486:10:23"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "struct Oracle.Observation storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4458,
                                          "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                          "value": "self"
                                        },
                                        "id": 4504,
                                        "name": "Identifier",
                                        "src": "8499:4:23"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "%",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4491,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 4505,
                                            "name": "Identifier",
                                            "src": "8504:1:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4466,
                                              "type": "uint16",
                                              "value": "cardinality"
                                            },
                                            "id": 4506,
                                            "name": "Identifier",
                                            "src": "8508:11:23"
                                          }
                                        ],
                                        "id": 4507,
                                        "name": "BinaryOperation",
                                        "src": "8504:15:23"
                                      }
                                    ],
                                    "id": 4508,
                                    "name": "IndexAccess",
                                    "src": "8499:21:23"
                                  }
                                ],
                                "id": 4509,
                                "name": "Assignment",
                                "src": "8486:34:23"
                              }
                            ],
                            "id": 4510,
                            "name": "ExpressionStatement",
                            "src": "8486:34:23"
                          },
                          {
                            "attributes": {},
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!",
                                  "prefix": true,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "initialized",
                                      "referencedDeclaration": 4183,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4469,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "beforeOrAt"
                                        },
                                        "id": 4511,
                                        "name": "Identifier",
                                        "src": "8632:10:23"
                                      }
                                    ],
                                    "id": 4512,
                                    "name": "MemberAccess",
                                    "src": "8632:22:23"
                                  }
                                ],
                                "id": 4513,
                                "name": "UnaryOperation",
                                "src": "8631:23:23"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4474,
                                              "type": "uint256",
                                              "value": "l"
                                            },
                                            "id": 4514,
                                            "name": "Identifier",
                                            "src": "8674:1:23"
                                          },
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "+",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4491,
                                                  "type": "uint256",
                                                  "value": "i"
                                                },
                                                "id": 4515,
                                                "name": "Identifier",
                                                "src": "8678:1:23"
                                              },
                                              {
                                                "attributes": {
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 4516,
                                                "name": "Literal",
                                                "src": "8682:1:23"
                                              }
                                            ],
                                            "id": 4517,
                                            "name": "BinaryOperation",
                                            "src": "8678:5:23"
                                          }
                                        ],
                                        "id": 4518,
                                        "name": "Assignment",
                                        "src": "8674:9:23"
                                      }
                                    ],
                                    "id": 4519,
                                    "name": "ExpressionStatement",
                                    "src": "8674:9:23"
                                  },
                                  {
                                    "id": 4520,
                                    "name": "Continue",
                                    "src": "8701:8:23"
                                  }
                                ],
                                "id": 4521,
                                "name": "Block",
                                "src": "8656:68:23"
                              }
                            ],
                            "id": 4522,
                            "name": "IfStatement",
                            "src": "8627:97:23"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "struct Oracle.Observation memory"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4471,
                                      "type": "struct Oracle.Observation memory",
                                      "value": "atOrAfter"
                                    },
                                    "id": 4523,
                                    "name": "Identifier",
                                    "src": "8738:9:23"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "struct Oracle.Observation storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4458,
                                          "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                          "value": "self"
                                        },
                                        "id": 4524,
                                        "name": "Identifier",
                                        "src": "8750:4:23"
                                      },
                                      {
                                        "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": 4491,
                                                      "type": "uint256",
                                                      "value": "i"
                                                    },
                                                    "id": 4525,
                                                    "name": "Identifier",
                                                    "src": "8756:1:23"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "hexvalue": "31",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "token": "number",
                                                      "type": "int_const 1",
                                                      "value": "1"
                                                    },
                                                    "id": 4526,
                                                    "name": "Literal",
                                                    "src": "8760:1:23"
                                                  }
                                                ],
                                                "id": 4527,
                                                "name": "BinaryOperation",
                                                "src": "8756:5:23"
                                              }
                                            ],
                                            "id": 4528,
                                            "name": "TupleExpression",
                                            "src": "8755:7:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4466,
                                              "type": "uint16",
                                              "value": "cardinality"
                                            },
                                            "id": 4529,
                                            "name": "Identifier",
                                            "src": "8765:11:23"
                                          }
                                        ],
                                        "id": 4530,
                                        "name": "BinaryOperation",
                                        "src": "8755:21:23"
                                      }
                                    ],
                                    "id": 4531,
                                    "name": "IndexAccess",
                                    "src": "8750:27:23"
                                  }
                                ],
                                "id": 4532,
                                "name": "Assignment",
                                "src": "8738:39:23"
                              }
                            ],
                            "id": 4533,
                            "name": "ExpressionStatement",
                            "src": "8738:39:23"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                4535
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "targetAtOrAfter",
                                  "scope": 4568,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "bool",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bool",
                                      "type": "bool"
                                    },
                                    "id": 4534,
                                    "name": "ElementaryTypeName",
                                    "src": "8792:4:23"
                                  }
                                ],
                                "id": 4535,
                                "name": "VariableDeclaration",
                                "src": "8792:20:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4453,
                                      "type": "function (uint32,uint32,uint32) pure returns (bool)",
                                      "value": "lte"
                                    },
                                    "id": 4536,
                                    "name": "Identifier",
                                    "src": "8815:3:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4460,
                                      "type": "uint32",
                                      "value": "time"
                                    },
                                    "id": 4537,
                                    "name": "Identifier",
                                    "src": "8819:4:23"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "blockTimestamp",
                                      "referencedDeclaration": 4177,
                                      "type": "uint32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4469,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "beforeOrAt"
                                        },
                                        "id": 4538,
                                        "name": "Identifier",
                                        "src": "8825:10:23"
                                      }
                                    ],
                                    "id": 4539,
                                    "name": "MemberAccess",
                                    "src": "8825:25:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4462,
                                      "type": "uint32",
                                      "value": "target"
                                    },
                                    "id": 4540,
                                    "name": "Identifier",
                                    "src": "8852:6:23"
                                  }
                                ],
                                "id": 4541,
                                "name": "FunctionCall",
                                "src": "8815:44:23"
                              }
                            ],
                            "id": 4542,
                            "name": "VariableDeclarationStatement",
                            "src": "8792:67:23"
                          },
                          {
                            "attributes": {},
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&&",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4535,
                                      "type": "bool",
                                      "value": "targetAtOrAfter"
                                    },
                                    "id": 4543,
                                    "name": "Identifier",
                                    "src": "8926:15:23"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            },
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            },
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4453,
                                          "type": "function (uint32,uint32,uint32) pure returns (bool)",
                                          "value": "lte"
                                        },
                                        "id": 4544,
                                        "name": "Identifier",
                                        "src": "8945:3:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4460,
                                          "type": "uint32",
                                          "value": "time"
                                        },
                                        "id": 4545,
                                        "name": "Identifier",
                                        "src": "8949:4:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4462,
                                          "type": "uint32",
                                          "value": "target"
                                        },
                                        "id": 4546,
                                        "name": "Identifier",
                                        "src": "8955:6:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "blockTimestamp",
                                          "referencedDeclaration": 4177,
                                          "type": "uint32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4471,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "atOrAfter"
                                            },
                                            "id": 4547,
                                            "name": "Identifier",
                                            "src": "8963:9:23"
                                          }
                                        ],
                                        "id": 4548,
                                        "name": "MemberAccess",
                                        "src": "8963:24:23"
                                      }
                                    ],
                                    "id": 4549,
                                    "name": "FunctionCall",
                                    "src": "8945:43:23"
                                  }
                                ],
                                "id": 4550,
                                "name": "BinaryOperation",
                                "src": "8926:62:23"
                              },
                              {
                                "id": 4551,
                                "name": "Break",
                                "src": "8990:5:23"
                              }
                            ],
                            "id": 4552,
                            "name": "IfStatement",
                            "src": "8922:73:23"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!",
                                  "prefix": true,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4535,
                                      "type": "bool",
                                      "value": "targetAtOrAfter"
                                    },
                                    "id": 4553,
                                    "name": "Identifier",
                                    "src": "9015:15:23"
                                  }
                                ],
                                "id": 4554,
                                "name": "UnaryOperation",
                                "src": "9014:16:23"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4483,
                                          "type": "uint256",
                                          "value": "r"
                                        },
                                        "id": 4555,
                                        "name": "Identifier",
                                        "src": "9032:1:23"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "-",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4491,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 4556,
                                            "name": "Identifier",
                                            "src": "9036:1:23"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 4557,
                                            "name": "Literal",
                                            "src": "9040:1:23"
                                          }
                                        ],
                                        "id": 4558,
                                        "name": "BinaryOperation",
                                        "src": "9036:5:23"
                                      }
                                    ],
                                    "id": 4559,
                                    "name": "Assignment",
                                    "src": "9032:9:23"
                                  }
                                ],
                                "id": 4560,
                                "name": "ExpressionStatement",
                                "src": "9032:9:23"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4474,
                                          "type": "uint256",
                                          "value": "l"
                                        },
                                        "id": 4561,
                                        "name": "Identifier",
                                        "src": "9060:1:23"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4491,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 4562,
                                            "name": "Identifier",
                                            "src": "9064:1:23"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 4563,
                                            "name": "Literal",
                                            "src": "9068:1:23"
                                          }
                                        ],
                                        "id": 4564,
                                        "name": "BinaryOperation",
                                        "src": "9064:5:23"
                                      }
                                    ],
                                    "id": 4565,
                                    "name": "Assignment",
                                    "src": "9060:9:23"
                                  }
                                ],
                                "id": 4566,
                                "name": "ExpressionStatement",
                                "src": "9060:9:23"
                              }
                            ],
                            "id": 4567,
                            "name": "IfStatement",
                            "src": "9010:59:23"
                          }
                        ],
                        "id": 4568,
                        "name": "Block",
                        "src": "8442:638:23"
                      }
                    ],
                    "id": 4569,
                    "name": "WhileStatement",
                    "src": "8429:651:23"
                  }
                ],
                "id": 4570,
                "name": "Block",
                "src": "8268:818:23"
              }
            ],
            "id": 4571,
            "name": "FunctionDefinition",
            "src": "8022:1064:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getSurroundingObservations",
              "scope": 4907,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Fetches the observations beforeOrAt and atOrAfter a given target, i.e. where [beforeOrAt, atOrAfter] is satisfied\n @dev Assumes there is at least 1 initialized observation.\n Used by observeSingle() to compute the counterfactual accumulator values as of a given block timestamp.\n @param self The stored oracle array\n @param time The current block.timestamp\n @param target The timestamp at which the reserved observation should be for\n @param tick The active tick at the time of the returned or simulated observation\n @param index The index of the observation that was most recently written to the observations array\n @param liquidity The total pool liquidity at the time of the call\n @param cardinality The number of populated elements in the oracle array\n @return beforeOrAt The observation which occurred at, or before, the given timestamp\n @return atOrAfter The observation which occurred at, or after, the given timestamp"
                },
                "id": 4572,
                "name": "StructuredDocumentation",
                "src": "9092:1013:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Oracle.Observation[65535]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "struct Oracle.Observation[65535]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4573,
                            "name": "UserDefinedTypeName",
                            "src": "10155:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3635353335",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 65535",
                              "value": "65535"
                            },
                            "id": 4574,
                            "name": "Literal",
                            "src": "10167:5:23"
                          }
                        ],
                        "id": 4575,
                        "name": "ArrayTypeName",
                        "src": "10155:18:23"
                      }
                    ],
                    "id": 4576,
                    "name": "VariableDeclaration",
                    "src": "10155:31:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "time",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4577,
                        "name": "ElementaryTypeName",
                        "src": "10196:6:23"
                      }
                    ],
                    "id": 4578,
                    "name": "VariableDeclaration",
                    "src": "10196:11:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "target",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4579,
                        "name": "ElementaryTypeName",
                        "src": "10217:6:23"
                      }
                    ],
                    "id": 4580,
                    "name": "VariableDeclaration",
                    "src": "10217:13:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tick",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 4581,
                        "name": "ElementaryTypeName",
                        "src": "10240:5:23"
                      }
                    ],
                    "id": 4582,
                    "name": "VariableDeclaration",
                    "src": "10240:10:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "index",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4583,
                        "name": "ElementaryTypeName",
                        "src": "10260:6:23"
                      }
                    ],
                    "id": 4584,
                    "name": "VariableDeclaration",
                    "src": "10260:12:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 4585,
                        "name": "ElementaryTypeName",
                        "src": "10282:7:23"
                      }
                    ],
                    "id": 4586,
                    "name": "VariableDeclaration",
                    "src": "10282:17:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinality",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4587,
                        "name": "ElementaryTypeName",
                        "src": "10309:6:23"
                      }
                    ],
                    "id": 4588,
                    "name": "VariableDeclaration",
                    "src": "10309:18:23"
                  }
                ],
                "id": 4589,
                "name": "ParameterList",
                "src": "10145:188:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "beforeOrAt",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct Oracle.Observation",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Observation",
                          "referencedDeclaration": 4184,
                          "type": "struct Oracle.Observation"
                        },
                        "id": 4590,
                        "name": "UserDefinedTypeName",
                        "src": "10356:11:23"
                      }
                    ],
                    "id": 4591,
                    "name": "VariableDeclaration",
                    "src": "10356:29:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "atOrAfter",
                      "scope": 4669,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "struct Oracle.Observation",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Observation",
                          "referencedDeclaration": 4184,
                          "type": "struct Oracle.Observation"
                        },
                        "id": 4592,
                        "name": "UserDefinedTypeName",
                        "src": "10387:11:23"
                      }
                    ],
                    "id": 4593,
                    "name": "VariableDeclaration",
                    "src": "10387:28:23"
                  }
                ],
                "id": 4594,
                "name": "ParameterList",
                "src": "10355:61:23"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "struct Oracle.Observation memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4591,
                              "type": "struct Oracle.Observation memory",
                              "value": "beforeOrAt"
                            },
                            "id": 4595,
                            "name": "Identifier",
                            "src": "10490:10:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct Oracle.Observation storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4576,
                                  "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                  "value": "self"
                                },
                                "id": 4596,
                                "name": "Identifier",
                                "src": "10503:4:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4584,
                                  "type": "uint16",
                                  "value": "index"
                                },
                                "id": 4597,
                                "name": "Identifier",
                                "src": "10508:5:23"
                              }
                            ],
                            "id": 4598,
                            "name": "IndexAccess",
                            "src": "10503:11:23"
                          }
                        ],
                        "id": 4599,
                        "name": "Assignment",
                        "src": "10490:24:23"
                      }
                    ],
                    "id": 4600,
                    "name": "ExpressionStatement",
                    "src": "10490:24:23"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4453,
                              "type": "function (uint32,uint32,uint32) pure returns (bool)",
                              "value": "lte"
                            },
                            "id": 4601,
                            "name": "Identifier",
                            "src": "10629:3:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4578,
                              "type": "uint32",
                              "value": "time"
                            },
                            "id": 4602,
                            "name": "Identifier",
                            "src": "10633:4:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "blockTimestamp",
                              "referencedDeclaration": 4177,
                              "type": "uint32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4591,
                                  "type": "struct Oracle.Observation memory",
                                  "value": "beforeOrAt"
                                },
                                "id": 4603,
                                "name": "Identifier",
                                "src": "10639:10:23"
                              }
                            ],
                            "id": 4604,
                            "name": "MemberAccess",
                            "src": "10639:25:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4580,
                              "type": "uint32",
                              "value": "target"
                            },
                            "id": 4605,
                            "name": "Identifier",
                            "src": "10666:6:23"
                          }
                        ],
                        "id": 4606,
                        "name": "FunctionCall",
                        "src": "10629:44:23"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "blockTimestamp",
                                      "referencedDeclaration": 4177,
                                      "type": "uint32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4591,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "beforeOrAt"
                                        },
                                        "id": 4607,
                                        "name": "Identifier",
                                        "src": "10693:10:23"
                                      }
                                    ],
                                    "id": 4608,
                                    "name": "MemberAccess",
                                    "src": "10693:25:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4580,
                                      "type": "uint32",
                                      "value": "target"
                                    },
                                    "id": 4609,
                                    "name": "Identifier",
                                    "src": "10722:6:23"
                                  }
                                ],
                                "id": 4610,
                                "name": "BinaryOperation",
                                "src": "10693:35:23"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "functionReturnParameters": 4594
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4591,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "beforeOrAt"
                                            },
                                            "id": 4611,
                                            "name": "Identifier",
                                            "src": "10864:10:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4593,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "atOrAfter"
                                            },
                                            "id": 4612,
                                            "name": "Identifier",
                                            "src": "10876:9:23"
                                          }
                                        ],
                                        "id": 4613,
                                        "name": "TupleExpression",
                                        "src": "10863:23:23"
                                      }
                                    ],
                                    "id": 4614,
                                    "name": "Return",
                                    "src": "10856:30:23"
                                  }
                                ],
                                "id": 4615,
                                "name": "Block",
                                "src": "10730:171:23"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "functionReturnParameters": 4594
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4591,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "beforeOrAt"
                                            },
                                            "id": 4616,
                                            "name": "Identifier",
                                            "src": "10984:10:23"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "struct Oracle.Observation memory",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                                      "typeString": "struct Oracle.Observation memory"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_uint32",
                                                      "typeString": "uint32"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_int24",
                                                      "typeString": "int24"
                                                    },
                                                    {
                                                      "typeIdentifier": "t_uint128",
                                                      "typeString": "uint128"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4239,
                                                  "type": "function (struct Oracle.Observation memory,uint32,int24,uint128) pure returns (struct Oracle.Observation memory)",
                                                  "value": "transform"
                                                },
                                                "id": 4617,
                                                "name": "Identifier",
                                                "src": "10996:9:23"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4591,
                                                  "type": "struct Oracle.Observation memory",
                                                  "value": "beforeOrAt"
                                                },
                                                "id": 4618,
                                                "name": "Identifier",
                                                "src": "11006:10:23"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4580,
                                                  "type": "uint32",
                                                  "value": "target"
                                                },
                                                "id": 4619,
                                                "name": "Identifier",
                                                "src": "11018:6:23"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4582,
                                                  "type": "int24",
                                                  "value": "tick"
                                                },
                                                "id": 4620,
                                                "name": "Identifier",
                                                "src": "11026:4:23"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4586,
                                                  "type": "uint128",
                                                  "value": "liquidity"
                                                },
                                                "id": 4621,
                                                "name": "Identifier",
                                                "src": "11032:9:23"
                                              }
                                            ],
                                            "id": 4622,
                                            "name": "FunctionCall",
                                            "src": "10996:46:23"
                                          }
                                        ],
                                        "id": 4623,
                                        "name": "TupleExpression",
                                        "src": "10983:60:23"
                                      }
                                    ],
                                    "id": 4624,
                                    "name": "Return",
                                    "src": "10976:67:23"
                                  }
                                ],
                                "id": 4625,
                                "name": "Block",
                                "src": "10907:151:23"
                              }
                            ],
                            "id": 4626,
                            "name": "IfStatement",
                            "src": "10689:369:23"
                          }
                        ],
                        "id": 4627,
                        "name": "Block",
                        "src": "10675:393:23"
                      }
                    ],
                    "id": 4628,
                    "name": "IfStatement",
                    "src": "10625:443:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "struct Oracle.Observation memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4591,
                              "type": "struct Oracle.Observation memory",
                              "value": "beforeOrAt"
                            },
                            "id": 4629,
                            "name": "Identifier",
                            "src": "11131:10:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct Oracle.Observation storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4576,
                                  "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                  "value": "self"
                                },
                                "id": 4630,
                                "name": "Identifier",
                                "src": "11144:4:23"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "%",
                                  "type": "uint16"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint16"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint16",
                                            "typeString": "uint16"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint16"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4584,
                                              "type": "uint16",
                                              "value": "index"
                                            },
                                            "id": 4631,
                                            "name": "Identifier",
                                            "src": "11150:5:23"
                                          },
                                          {
                                            "attributes": {
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 4632,
                                            "name": "Literal",
                                            "src": "11158:1:23"
                                          }
                                        ],
                                        "id": 4633,
                                        "name": "BinaryOperation",
                                        "src": "11150:9:23"
                                      }
                                    ],
                                    "id": 4634,
                                    "name": "TupleExpression",
                                    "src": "11149:11:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4588,
                                      "type": "uint16",
                                      "value": "cardinality"
                                    },
                                    "id": 4635,
                                    "name": "Identifier",
                                    "src": "11163:11:23"
                                  }
                                ],
                                "id": 4636,
                                "name": "BinaryOperation",
                                "src": "11149:25:23"
                              }
                            ],
                            "id": 4637,
                            "name": "IndexAccess",
                            "src": "11144:31:23"
                          }
                        ],
                        "id": 4638,
                        "name": "Assignment",
                        "src": "11131:44:23"
                      }
                    ],
                    "id": 4639,
                    "name": "ExpressionStatement",
                    "src": "11131:44:23"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "initialized",
                              "referencedDeclaration": 4183,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4591,
                                  "type": "struct Oracle.Observation memory",
                                  "value": "beforeOrAt"
                                },
                                "id": 4640,
                                "name": "Identifier",
                                "src": "11190:10:23"
                              }
                            ],
                            "id": 4641,
                            "name": "MemberAccess",
                            "src": "11190:22:23"
                          }
                        ],
                        "id": 4642,
                        "name": "UnaryOperation",
                        "src": "11189:23:23"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "struct Oracle.Observation memory"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4591,
                                  "type": "struct Oracle.Observation memory",
                                  "value": "beforeOrAt"
                                },
                                "id": 4643,
                                "name": "Identifier",
                                "src": "11214:10:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Oracle.Observation storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4576,
                                      "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                      "value": "self"
                                    },
                                    "id": 4644,
                                    "name": "Identifier",
                                    "src": "11227:4:23"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4645,
                                    "name": "Literal",
                                    "src": "11232:1:23"
                                  }
                                ],
                                "id": 4646,
                                "name": "IndexAccess",
                                "src": "11227:7:23"
                              }
                            ],
                            "id": 4647,
                            "name": "Assignment",
                            "src": "11214:20:23"
                          }
                        ],
                        "id": 4648,
                        "name": "ExpressionStatement",
                        "src": "11214:20:23"
                      }
                    ],
                    "id": 4649,
                    "name": "IfStatement",
                    "src": "11185:49:23"
                  },
                  {
                    "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"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_d30c0d219016dd7e5cf2b2c30c4d7c091820fc329f335b57cab26b9ff3384a9e",
                                  "typeString": "literal_string \"OLD\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4650,
                            "name": "Identifier",
                            "src": "11333:7:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint32",
                                      "typeString": "uint32"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4453,
                                  "type": "function (uint32,uint32,uint32) pure returns (bool)",
                                  "value": "lte"
                                },
                                "id": 4651,
                                "name": "Identifier",
                                "src": "11341:3:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4578,
                                  "type": "uint32",
                                  "value": "time"
                                },
                                "id": 4652,
                                "name": "Identifier",
                                "src": "11345:4:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "blockTimestamp",
                                  "referencedDeclaration": 4177,
                                  "type": "uint32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4591,
                                      "type": "struct Oracle.Observation memory",
                                      "value": "beforeOrAt"
                                    },
                                    "id": 4653,
                                    "name": "Identifier",
                                    "src": "11351:10:23"
                                  }
                                ],
                                "id": 4654,
                                "name": "MemberAccess",
                                "src": "11351:25:23"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4580,
                                  "type": "uint32",
                                  "value": "target"
                                },
                                "id": 4655,
                                "name": "Identifier",
                                "src": "11378:6:23"
                              }
                            ],
                            "id": 4656,
                            "name": "FunctionCall",
                            "src": "11341:44:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4f4c44",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"OLD\"",
                              "value": "OLD"
                            },
                            "id": 4657,
                            "name": "Literal",
                            "src": "11387:5:23"
                          }
                        ],
                        "id": 4658,
                        "name": "FunctionCall",
                        "src": "11333:60:23"
                      }
                    ],
                    "id": 4659,
                    "name": "ExpressionStatement",
                    "src": "11333:60:23"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4594
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                                  "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4571,
                              "type": "function (struct Oracle.Observation storage ref[65535] storage pointer,uint32,uint32,uint16,uint16) view returns (struct Oracle.Observation memory,struct Oracle.Observation memory)",
                              "value": "binarySearch"
                            },
                            "id": 4660,
                            "name": "Identifier",
                            "src": "11476:12:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4576,
                              "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                              "value": "self"
                            },
                            "id": 4661,
                            "name": "Identifier",
                            "src": "11489:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4578,
                              "type": "uint32",
                              "value": "time"
                            },
                            "id": 4662,
                            "name": "Identifier",
                            "src": "11495:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4580,
                              "type": "uint32",
                              "value": "target"
                            },
                            "id": 4663,
                            "name": "Identifier",
                            "src": "11501:6:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4584,
                              "type": "uint16",
                              "value": "index"
                            },
                            "id": 4664,
                            "name": "Identifier",
                            "src": "11509:5:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4588,
                              "type": "uint16",
                              "value": "cardinality"
                            },
                            "id": 4665,
                            "name": "Identifier",
                            "src": "11516:11:23"
                          }
                        ],
                        "id": 4666,
                        "name": "FunctionCall",
                        "src": "11476:52:23"
                      }
                    ],
                    "id": 4667,
                    "name": "Return",
                    "src": "11469:59:23"
                  }
                ],
                "id": 4668,
                "name": "Block",
                "src": "10417:1118:23"
              }
            ],
            "id": 4669,
            "name": "FunctionDefinition",
            "src": "10110:1425:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "observeSingle",
              "scope": 4907,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@dev Reverts if an observation at or before the desired observation timestamp does not exist.\n 0 may be passed as `secondsAgo' to return the current cumulative values.\n If called with a timestamp falling between two observations, returns the counterfactual accumulator values\n at exactly the timestamp between the two observations.\n @param self The stored oracle array\n @param time The current block timestamp\n @param secondsAgo The amount of time to look back, in seconds, at which point to return an observation\n @param tick The current tick\n @param index The index of the observation that was most recently written to the observations array\n @param liquidity The current in-range pool liquidity\n @param cardinality The number of populated elements in the oracle array\n @return tickCumulative The tick * time elapsed since the pool was first initialized, as of `secondsAgo`\n @return secondsPerLiquidityCumulativeX128 The time elapsed / max(1, liquidity) since the pool was first initialized, as of `secondsAgo`"
                },
                "id": 4670,
                "name": "StructuredDocumentation",
                "src": "11541:1100:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Oracle.Observation[65535]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "struct Oracle.Observation[65535]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4671,
                            "name": "UserDefinedTypeName",
                            "src": "12678:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3635353335",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 65535",
                              "value": "65535"
                            },
                            "id": 4672,
                            "name": "Literal",
                            "src": "12690:5:23"
                          }
                        ],
                        "id": 4673,
                        "name": "ArrayTypeName",
                        "src": "12678:18:23"
                      }
                    ],
                    "id": 4674,
                    "name": "VariableDeclaration",
                    "src": "12678:31:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "time",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4675,
                        "name": "ElementaryTypeName",
                        "src": "12719:6:23"
                      }
                    ],
                    "id": 4676,
                    "name": "VariableDeclaration",
                    "src": "12719:11:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "secondsAgo",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4677,
                        "name": "ElementaryTypeName",
                        "src": "12740:6:23"
                      }
                    ],
                    "id": 4678,
                    "name": "VariableDeclaration",
                    "src": "12740:17:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tick",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 4679,
                        "name": "ElementaryTypeName",
                        "src": "12767:5:23"
                      }
                    ],
                    "id": 4680,
                    "name": "VariableDeclaration",
                    "src": "12767:10:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "index",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4681,
                        "name": "ElementaryTypeName",
                        "src": "12787:6:23"
                      }
                    ],
                    "id": 4682,
                    "name": "VariableDeclaration",
                    "src": "12787:12:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 4683,
                        "name": "ElementaryTypeName",
                        "src": "12809:7:23"
                      }
                    ],
                    "id": 4684,
                    "name": "VariableDeclaration",
                    "src": "12809:17:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinality",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4685,
                        "name": "ElementaryTypeName",
                        "src": "12836:6:23"
                      }
                    ],
                    "id": 4686,
                    "name": "VariableDeclaration",
                    "src": "12836:18:23"
                  }
                ],
                "id": 4687,
                "name": "ParameterList",
                "src": "12668:192:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tickCumulative",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int56",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int56",
                          "type": "int56"
                        },
                        "id": 4688,
                        "name": "ElementaryTypeName",
                        "src": "12884:5:23"
                      }
                    ],
                    "id": 4689,
                    "name": "VariableDeclaration",
                    "src": "12884:20:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "secondsPerLiquidityCumulativeX128",
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint160",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint160",
                          "type": "uint160"
                        },
                        "id": 4690,
                        "name": "ElementaryTypeName",
                        "src": "12906:7:23"
                      }
                    ],
                    "id": 4691,
                    "name": "VariableDeclaration",
                    "src": "12906:41:23"
                  }
                ],
                "id": 4692,
                "name": "ParameterList",
                "src": "12883:65:23"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4678,
                              "type": "uint32",
                              "value": "secondsAgo"
                            },
                            "id": 4693,
                            "name": "Identifier",
                            "src": "12963:10:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4694,
                            "name": "Literal",
                            "src": "12977:1:23"
                          }
                        ],
                        "id": 4695,
                        "name": "BinaryOperation",
                        "src": "12963:15:23"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                4697
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "last",
                                  "scope": 4722,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "struct Oracle.Observation",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "Observation",
                                      "referencedDeclaration": 4184,
                                      "type": "struct Oracle.Observation"
                                    },
                                    "id": 4696,
                                    "name": "UserDefinedTypeName",
                                    "src": "12994:11:23"
                                  }
                                ],
                                "id": 4697,
                                "name": "VariableDeclaration",
                                "src": "12994:23:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Oracle.Observation storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4674,
                                      "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                      "value": "self"
                                    },
                                    "id": 4698,
                                    "name": "Identifier",
                                    "src": "13020:4:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4682,
                                      "type": "uint16",
                                      "value": "index"
                                    },
                                    "id": 4699,
                                    "name": "Identifier",
                                    "src": "13025:5:23"
                                  }
                                ],
                                "id": 4700,
                                "name": "IndexAccess",
                                "src": "13020:11:23"
                              }
                            ],
                            "id": 4701,
                            "name": "VariableDeclarationStatement",
                            "src": "12994:37:23"
                          },
                          {
                            "attributes": {},
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint32",
                                    "typeString": "uint32"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "blockTimestamp",
                                      "referencedDeclaration": 4177,
                                      "type": "uint32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4697,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "last"
                                        },
                                        "id": 4702,
                                        "name": "Identifier",
                                        "src": "13049:4:23"
                                      }
                                    ],
                                    "id": 4703,
                                    "name": "MemberAccess",
                                    "src": "13049:19:23"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4676,
                                      "type": "uint32",
                                      "value": "time"
                                    },
                                    "id": 4704,
                                    "name": "Identifier",
                                    "src": "13072:4:23"
                                  }
                                ],
                                "id": 4705,
                                "name": "BinaryOperation",
                                "src": "13049:27:23"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "struct Oracle.Observation memory"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4697,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "last"
                                        },
                                        "id": 4706,
                                        "name": "Identifier",
                                        "src": "13078:4:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "struct Oracle.Observation memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_struct$_Observation_$4184_memory_ptr",
                                                  "typeString": "struct Oracle.Observation memory"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint32",
                                                  "typeString": "uint32"
                                                },
                                                {
                                                  "typeIdentifier": "t_int24",
                                                  "typeString": "int24"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint128",
                                                  "typeString": "uint128"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4239,
                                              "type": "function (struct Oracle.Observation memory,uint32,int24,uint128) pure returns (struct Oracle.Observation memory)",
                                              "value": "transform"
                                            },
                                            "id": 4707,
                                            "name": "Identifier",
                                            "src": "13085:9:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4697,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "last"
                                            },
                                            "id": 4708,
                                            "name": "Identifier",
                                            "src": "13095:4:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4676,
                                              "type": "uint32",
                                              "value": "time"
                                            },
                                            "id": 4709,
                                            "name": "Identifier",
                                            "src": "13101:4:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4680,
                                              "type": "int24",
                                              "value": "tick"
                                            },
                                            "id": 4710,
                                            "name": "Identifier",
                                            "src": "13107:4:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4684,
                                              "type": "uint128",
                                              "value": "liquidity"
                                            },
                                            "id": 4711,
                                            "name": "Identifier",
                                            "src": "13113:9:23"
                                          }
                                        ],
                                        "id": 4712,
                                        "name": "FunctionCall",
                                        "src": "13085:38:23"
                                      }
                                    ],
                                    "id": 4713,
                                    "name": "Assignment",
                                    "src": "13078:45:23"
                                  }
                                ],
                                "id": 4714,
                                "name": "ExpressionStatement",
                                "src": "13078:45:23"
                              }
                            ],
                            "id": 4715,
                            "name": "IfStatement",
                            "src": "13045:78:23"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 4692
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(int56,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "tickCumulative",
                                      "referencedDeclaration": 4179,
                                      "type": "int56"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4697,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "last"
                                        },
                                        "id": 4716,
                                        "name": "Identifier",
                                        "src": "13145:4:23"
                                      }
                                    ],
                                    "id": 4717,
                                    "name": "MemberAccess",
                                    "src": "13145:19:23"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "secondsPerLiquidityCumulativeX128",
                                      "referencedDeclaration": 4181,
                                      "type": "uint160"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4697,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "last"
                                        },
                                        "id": 4718,
                                        "name": "Identifier",
                                        "src": "13166:4:23"
                                      }
                                    ],
                                    "id": 4719,
                                    "name": "MemberAccess",
                                    "src": "13166:38:23"
                                  }
                                ],
                                "id": 4720,
                                "name": "TupleExpression",
                                "src": "13144:61:23"
                              }
                            ],
                            "id": 4721,
                            "name": "Return",
                            "src": "13137:68:23"
                          }
                        ],
                        "id": 4722,
                        "name": "Block",
                        "src": "12980:236:23"
                      }
                    ],
                    "id": 4723,
                    "name": "IfStatement",
                    "src": "12959:257:23"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4725
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "target",
                          "scope": 4819,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint32",
                              "type": "uint32"
                            },
                            "id": 4724,
                            "name": "ElementaryTypeName",
                            "src": "13226:6:23"
                          }
                        ],
                        "id": 4725,
                        "name": "VariableDeclaration",
                        "src": "13226:13:23"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "uint32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4676,
                              "type": "uint32",
                              "value": "time"
                            },
                            "id": 4726,
                            "name": "Identifier",
                            "src": "13242:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4678,
                              "type": "uint32",
                              "value": "secondsAgo"
                            },
                            "id": 4727,
                            "name": "Identifier",
                            "src": "13249:10:23"
                          }
                        ],
                        "id": 4728,
                        "name": "BinaryOperation",
                        "src": "13242:17:23"
                      }
                    ],
                    "id": 4729,
                    "name": "VariableDeclarationStatement",
                    "src": "13226:33:23"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4731,
                        4733
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "beforeOrAt",
                          "scope": 4819,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct Oracle.Observation",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4730,
                            "name": "UserDefinedTypeName",
                            "src": "13271:11:23"
                          }
                        ],
                        "id": 4731,
                        "name": "VariableDeclaration",
                        "src": "13271:29:23"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "atOrAfter",
                          "scope": 4819,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct Oracle.Observation",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4732,
                            "name": "UserDefinedTypeName",
                            "src": "13302:11:23"
                          }
                        ],
                        "id": 4733,
                        "name": "VariableDeclaration",
                        "src": "13302:28:23"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(struct Oracle.Observation memory,struct Oracle.Observation memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                                  "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                },
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4669,
                              "type": "function (struct Oracle.Observation storage ref[65535] storage pointer,uint32,uint32,int24,uint16,uint128,uint16) view returns (struct Oracle.Observation memory,struct Oracle.Observation memory)",
                              "value": "getSurroundingObservations"
                            },
                            "id": 4734,
                            "name": "Identifier",
                            "src": "13346:26:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4674,
                              "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                              "value": "self"
                            },
                            "id": 4735,
                            "name": "Identifier",
                            "src": "13373:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4676,
                              "type": "uint32",
                              "value": "time"
                            },
                            "id": 4736,
                            "name": "Identifier",
                            "src": "13379:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4725,
                              "type": "uint32",
                              "value": "target"
                            },
                            "id": 4737,
                            "name": "Identifier",
                            "src": "13385:6:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4680,
                              "type": "int24",
                              "value": "tick"
                            },
                            "id": 4738,
                            "name": "Identifier",
                            "src": "13393:4:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4682,
                              "type": "uint16",
                              "value": "index"
                            },
                            "id": 4739,
                            "name": "Identifier",
                            "src": "13399:5:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4684,
                              "type": "uint128",
                              "value": "liquidity"
                            },
                            "id": 4740,
                            "name": "Identifier",
                            "src": "13406:9:23"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4686,
                              "type": "uint16",
                              "value": "cardinality"
                            },
                            "id": 4741,
                            "name": "Identifier",
                            "src": "13417:11:23"
                          }
                        ],
                        "id": 4742,
                        "name": "FunctionCall",
                        "src": "13346:83:23"
                      }
                    ],
                    "id": 4743,
                    "name": "VariableDeclarationStatement",
                    "src": "13270:159:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4725,
                              "type": "uint32",
                              "value": "target"
                            },
                            "id": 4744,
                            "name": "Identifier",
                            "src": "13444:6:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "blockTimestamp",
                              "referencedDeclaration": 4177,
                              "type": "uint32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4731,
                                  "type": "struct Oracle.Observation memory",
                                  "value": "beforeOrAt"
                                },
                                "id": 4745,
                                "name": "Identifier",
                                "src": "13454:10:23"
                              }
                            ],
                            "id": 4746,
                            "name": "MemberAccess",
                            "src": "13454:25:23"
                          }
                        ],
                        "id": 4747,
                        "name": "BinaryOperation",
                        "src": "13444:35:23"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4692
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(int56,uint160)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "tickCumulative",
                                      "referencedDeclaration": 4179,
                                      "type": "int56"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4731,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "beforeOrAt"
                                        },
                                        "id": 4748,
                                        "name": "Identifier",
                                        "src": "13545:10:23"
                                      }
                                    ],
                                    "id": 4749,
                                    "name": "MemberAccess",
                                    "src": "13545:25:23"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "secondsPerLiquidityCumulativeX128",
                                      "referencedDeclaration": 4181,
                                      "type": "uint160"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4731,
                                          "type": "struct Oracle.Observation memory",
                                          "value": "beforeOrAt"
                                        },
                                        "id": 4750,
                                        "name": "Identifier",
                                        "src": "13572:10:23"
                                      }
                                    ],
                                    "id": 4751,
                                    "name": "MemberAccess",
                                    "src": "13572:44:23"
                                  }
                                ],
                                "id": 4752,
                                "name": "TupleExpression",
                                "src": "13544:73:23"
                              }
                            ],
                            "id": 4753,
                            "name": "Return",
                            "src": "13537:80:23"
                          }
                        ],
                        "id": 4754,
                        "name": "Block",
                        "src": "13481:147:23"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4725,
                                  "type": "uint32",
                                  "value": "target"
                                },
                                "id": 4755,
                                "name": "Identifier",
                                "src": "13638:6:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "blockTimestamp",
                                  "referencedDeclaration": 4177,
                                  "type": "uint32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4733,
                                      "type": "struct Oracle.Observation memory",
                                      "value": "atOrAfter"
                                    },
                                    "id": 4756,
                                    "name": "Identifier",
                                    "src": "13648:9:23"
                                  }
                                ],
                                "id": 4757,
                                "name": "MemberAccess",
                                "src": "13648:24:23"
                              }
                            ],
                            "id": 4758,
                            "name": "BinaryOperation",
                            "src": "13638:34:23"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "functionReturnParameters": 4692
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "tuple(int56,uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "tickCumulative",
                                          "referencedDeclaration": 4179,
                                          "type": "int56"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4733,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "atOrAfter"
                                            },
                                            "id": 4759,
                                            "name": "Identifier",
                                            "src": "13739:9:23"
                                          }
                                        ],
                                        "id": 4760,
                                        "name": "MemberAccess",
                                        "src": "13739:24:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "secondsPerLiquidityCumulativeX128",
                                          "referencedDeclaration": 4181,
                                          "type": "uint160"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4733,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "atOrAfter"
                                            },
                                            "id": 4761,
                                            "name": "Identifier",
                                            "src": "13765:9:23"
                                          }
                                        ],
                                        "id": 4762,
                                        "name": "MemberAccess",
                                        "src": "13765:43:23"
                                      }
                                    ],
                                    "id": 4763,
                                    "name": "TupleExpression",
                                    "src": "13738:71:23"
                                  }
                                ],
                                "id": 4764,
                                "name": "Return",
                                "src": "13731:78:23"
                              }
                            ],
                            "id": 4765,
                            "name": "Block",
                            "src": "13674:146:23"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "assignments": [
                                    4767
                                  ]
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "constant": false,
                                      "mutability": "mutable",
                                      "name": "observationTimeDelta",
                                      "scope": 4816,
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "type": "uint32",
                                      "visibility": "internal"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint32",
                                          "type": "uint32"
                                        },
                                        "id": 4766,
                                        "name": "ElementaryTypeName",
                                        "src": "13875:6:23"
                                      }
                                    ],
                                    "id": 4767,
                                    "name": "VariableDeclaration",
                                    "src": "13875:27:23"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "blockTimestamp",
                                          "referencedDeclaration": 4177,
                                          "type": "uint32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4733,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "atOrAfter"
                                            },
                                            "id": 4768,
                                            "name": "Identifier",
                                            "src": "13905:9:23"
                                          }
                                        ],
                                        "id": 4769,
                                        "name": "MemberAccess",
                                        "src": "13905:24:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "blockTimestamp",
                                          "referencedDeclaration": 4177,
                                          "type": "uint32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4731,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "beforeOrAt"
                                            },
                                            "id": 4770,
                                            "name": "Identifier",
                                            "src": "13932:10:23"
                                          }
                                        ],
                                        "id": 4771,
                                        "name": "MemberAccess",
                                        "src": "13932:25:23"
                                      }
                                    ],
                                    "id": 4772,
                                    "name": "BinaryOperation",
                                    "src": "13905:52:23"
                                  }
                                ],
                                "id": 4773,
                                "name": "VariableDeclarationStatement",
                                "src": "13875:82:23"
                              },
                              {
                                "attributes": {
                                  "assignments": [
                                    4775
                                  ]
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "constant": false,
                                      "mutability": "mutable",
                                      "name": "targetDelta",
                                      "scope": 4816,
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "type": "uint32",
                                      "visibility": "internal"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint32",
                                          "type": "uint32"
                                        },
                                        "id": 4774,
                                        "name": "ElementaryTypeName",
                                        "src": "13971:6:23"
                                      }
                                    ],
                                    "id": 4775,
                                    "name": "VariableDeclaration",
                                    "src": "13971:18:23"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint32",
                                        "typeString": "uint32"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4725,
                                          "type": "uint32",
                                          "value": "target"
                                        },
                                        "id": 4776,
                                        "name": "Identifier",
                                        "src": "13992:6:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "blockTimestamp",
                                          "referencedDeclaration": 4177,
                                          "type": "uint32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4731,
                                              "type": "struct Oracle.Observation memory",
                                              "value": "beforeOrAt"
                                            },
                                            "id": 4777,
                                            "name": "Identifier",
                                            "src": "14001:10:23"
                                          }
                                        ],
                                        "id": 4778,
                                        "name": "MemberAccess",
                                        "src": "14001:25:23"
                                      }
                                    ],
                                    "id": 4779,
                                    "name": "BinaryOperation",
                                    "src": "13992:34:23"
                                  }
                                ],
                                "id": 4780,
                                "name": "VariableDeclarationStatement",
                                "src": "13971:55:23"
                              },
                              {
                                "attributes": {
                                  "functionReturnParameters": 4692
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "tuple(int56,uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_int56",
                                            "typeString": "int56"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "int56"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "tickCumulative",
                                              "referencedDeclaration": 4179,
                                              "type": "int56"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4731,
                                                  "type": "struct Oracle.Observation memory",
                                                  "value": "beforeOrAt"
                                                },
                                                "id": 4781,
                                                "name": "Identifier",
                                                "src": "14065:10:23"
                                              }
                                            ],
                                            "id": 4782,
                                            "name": "MemberAccess",
                                            "src": "14065:25:23"
                                          },
                                          {
                                            "attributes": {
                                              "commonType": {
                                                "typeIdentifier": "t_int56",
                                                "typeString": "int56"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "*",
                                              "type": "int56"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "int56"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "commonType": {
                                                        "typeIdentifier": "t_int56",
                                                        "typeString": "int56"
                                                      },
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "operator": "/",
                                                      "type": "int56"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "isConstant": false,
                                                          "isInlineArray": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "int56"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_int56",
                                                                "typeString": "int56"
                                                              },
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "operator": "-",
                                                              "type": "int56"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "isConstant": false,
                                                                  "isLValue": true,
                                                                  "isPure": false,
                                                                  "lValueRequested": false,
                                                                  "member_name": "tickCumulative",
                                                                  "referencedDeclaration": 4179,
                                                                  "type": "int56"
                                                                },
                                                                "children": [
                                                                  {
                                                                    "attributes": {
                                                                      "overloadedDeclarations": [
                                                                        null
                                                                      ],
                                                                      "referencedDeclaration": 4733,
                                                                      "type": "struct Oracle.Observation memory",
                                                                      "value": "atOrAfter"
                                                                    },
                                                                    "id": 4783,
                                                                    "name": "Identifier",
                                                                    "src": "14115:9:23"
                                                                  }
                                                                ],
                                                                "id": 4784,
                                                                "name": "MemberAccess",
                                                                "src": "14115:24:23"
                                                              },
                                                              {
                                                                "attributes": {
                                                                  "isConstant": false,
                                                                  "isLValue": true,
                                                                  "isPure": false,
                                                                  "lValueRequested": false,
                                                                  "member_name": "tickCumulative",
                                                                  "referencedDeclaration": 4179,
                                                                  "type": "int56"
                                                                },
                                                                "children": [
                                                                  {
                                                                    "attributes": {
                                                                      "overloadedDeclarations": [
                                                                        null
                                                                      ],
                                                                      "referencedDeclaration": 4731,
                                                                      "type": "struct Oracle.Observation memory",
                                                                      "value": "beforeOrAt"
                                                                    },
                                                                    "id": 4785,
                                                                    "name": "Identifier",
                                                                    "src": "14142:10:23"
                                                                  }
                                                                ],
                                                                "id": 4786,
                                                                "name": "MemberAccess",
                                                                "src": "14142:25:23"
                                                              }
                                                            ],
                                                            "id": 4787,
                                                            "name": "BinaryOperation",
                                                            "src": "14115:52:23"
                                                          }
                                                        ],
                                                        "id": 4788,
                                                        "name": "TupleExpression",
                                                        "src": "14114:54:23"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 4767,
                                                          "type": "uint32",
                                                          "value": "observationTimeDelta"
                                                        },
                                                        "id": 4789,
                                                        "name": "Identifier",
                                                        "src": "14171:20:23"
                                                      }
                                                    ],
                                                    "id": 4790,
                                                    "name": "BinaryOperation",
                                                    "src": "14114:77:23"
                                                  }
                                                ],
                                                "id": 4791,
                                                "name": "TupleExpression",
                                                "src": "14113:79:23"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4775,
                                                  "type": "uint32",
                                                  "value": "targetDelta"
                                                },
                                                "id": 4792,
                                                "name": "Identifier",
                                                "src": "14215:11:23"
                                              }
                                            ],
                                            "id": 4793,
                                            "name": "BinaryOperation",
                                            "src": "14113:113:23"
                                          }
                                        ],
                                        "id": 4794,
                                        "name": "BinaryOperation",
                                        "src": "14065:161:23"
                                      },
                                      {
                                        "attributes": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint160",
                                            "typeString": "uint160"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "+",
                                          "type": "uint160"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "secondsPerLiquidityCumulativeX128",
                                              "referencedDeclaration": 4181,
                                              "type": "uint160"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4731,
                                                  "type": "struct Oracle.Observation memory",
                                                  "value": "beforeOrAt"
                                                },
                                                "id": 4795,
                                                "name": "Identifier",
                                                "src": "14244:10:23"
                                              }
                                            ],
                                            "id": 4796,
                                            "name": "MemberAccess",
                                            "src": "14244:44:23"
                                          },
                                          {
                                            "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": 4797,
                                                    "name": "ElementaryTypeName",
                                                    "src": "14311:7:23"
                                                  }
                                                ],
                                                "id": 4798,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "14311:7:23"
                                              },
                                              {
                                                "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": {
                                                              "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": 4799,
                                                                    "name": "ElementaryTypeName",
                                                                    "src": "14345:7:23"
                                                                  }
                                                                ],
                                                                "id": 4800,
                                                                "name": "ElementaryTypeNameExpression",
                                                                "src": "14345:7:23"
                                                              },
                                                              {
                                                                "attributes": {
                                                                  "commonType": {
                                                                    "typeIdentifier": "t_uint160",
                                                                    "typeString": "uint160"
                                                                  },
                                                                  "isConstant": false,
                                                                  "isLValue": false,
                                                                  "isPure": false,
                                                                  "lValueRequested": false,
                                                                  "operator": "-",
                                                                  "type": "uint160"
                                                                },
                                                                "children": [
                                                                  {
                                                                    "attributes": {
                                                                      "isConstant": false,
                                                                      "isLValue": true,
                                                                      "isPure": false,
                                                                      "lValueRequested": false,
                                                                      "member_name": "secondsPerLiquidityCumulativeX128",
                                                                      "referencedDeclaration": 4181,
                                                                      "type": "uint160"
                                                                    },
                                                                    "children": [
                                                                      {
                                                                        "attributes": {
                                                                          "overloadedDeclarations": [
                                                                            null
                                                                          ],
                                                                          "referencedDeclaration": 4733,
                                                                          "type": "struct Oracle.Observation memory",
                                                                          "value": "atOrAfter"
                                                                        },
                                                                        "id": 4801,
                                                                        "name": "Identifier",
                                                                        "src": "14382:9:23"
                                                                      }
                                                                    ],
                                                                    "id": 4802,
                                                                    "name": "MemberAccess",
                                                                    "src": "14382:43:23"
                                                                  },
                                                                  {
                                                                    "attributes": {
                                                                      "isConstant": false,
                                                                      "isLValue": true,
                                                                      "isPure": false,
                                                                      "lValueRequested": false,
                                                                      "member_name": "secondsPerLiquidityCumulativeX128",
                                                                      "referencedDeclaration": 4181,
                                                                      "type": "uint160"
                                                                    },
                                                                    "children": [
                                                                      {
                                                                        "attributes": {
                                                                          "overloadedDeclarations": [
                                                                            null
                                                                          ],
                                                                          "referencedDeclaration": 4731,
                                                                          "type": "struct Oracle.Observation memory",
                                                                          "value": "beforeOrAt"
                                                                        },
                                                                        "id": 4803,
                                                                        "name": "Identifier",
                                                                        "src": "14428:10:23"
                                                                      }
                                                                    ],
                                                                    "id": 4804,
                                                                    "name": "MemberAccess",
                                                                    "src": "14428:44:23"
                                                                  }
                                                                ],
                                                                "id": 4805,
                                                                "name": "BinaryOperation",
                                                                "src": "14382:90:23"
                                                              }
                                                            ],
                                                            "id": 4806,
                                                            "name": "FunctionCall",
                                                            "src": "14345:153:23"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 4775,
                                                              "type": "uint32",
                                                              "value": "targetDelta"
                                                            },
                                                            "id": 4807,
                                                            "name": "Identifier",
                                                            "src": "14501:11:23"
                                                          }
                                                        ],
                                                        "id": 4808,
                                                        "name": "BinaryOperation",
                                                        "src": "14345:167:23"
                                                      }
                                                    ],
                                                    "id": 4809,
                                                    "name": "TupleExpression",
                                                    "src": "14344:169:23"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4767,
                                                      "type": "uint32",
                                                      "value": "observationTimeDelta"
                                                    },
                                                    "id": 4810,
                                                    "name": "Identifier",
                                                    "src": "14516:20:23"
                                                  }
                                                ],
                                                "id": 4811,
                                                "name": "BinaryOperation",
                                                "src": "14344:192:23"
                                              }
                                            ],
                                            "id": 4812,
                                            "name": "FunctionCall",
                                            "src": "14311:247:23"
                                          }
                                        ],
                                        "id": 4813,
                                        "name": "BinaryOperation",
                                        "src": "14244:314:23"
                                      }
                                    ],
                                    "id": 4814,
                                    "name": "TupleExpression",
                                    "src": "14047:525:23"
                                  }
                                ],
                                "id": 4815,
                                "name": "Return",
                                "src": "14040:532:23"
                              }
                            ],
                            "id": 4816,
                            "name": "Block",
                            "src": "13826:757:23"
                          }
                        ],
                        "id": 4817,
                        "name": "IfStatement",
                        "src": "13634:949:23"
                      }
                    ],
                    "id": 4818,
                    "name": "IfStatement",
                    "src": "13440:1143:23"
                  }
                ],
                "id": 4819,
                "name": "Block",
                "src": "12949:1640:23"
              }
            ],
            "id": 4820,
            "name": "FunctionDefinition",
            "src": "12646:1943:23"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "observe",
              "scope": 4907,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Returns the accumulator values as of each time seconds ago from the given time in the array of `secondsAgos`\n @dev Reverts if `secondsAgos` > oldest observation\n @param self The stored oracle array\n @param time The current block.timestamp\n @param secondsAgos Each amount of time to look back, in seconds, at which point to return an observation\n @param tick The current tick\n @param index The index of the observation that was most recently written to the observations array\n @param liquidity The current in-range pool liquidity\n @param cardinality The number of populated elements in the oracle array\n @return tickCumulatives The tick * time elapsed since the pool was first initialized, as of each `secondsAgo`\n @return secondsPerLiquidityCumulativeX128s The cumulative seconds / max(1, liquidity) since the pool was first initialized, as of each `secondsAgo`"
                },
                "id": 4821,
                "name": "StructuredDocumentation",
                "src": "14595:943:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Oracle.Observation[65535]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "struct Oracle.Observation[65535]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Observation",
                              "referencedDeclaration": 4184,
                              "type": "struct Oracle.Observation"
                            },
                            "id": 4822,
                            "name": "UserDefinedTypeName",
                            "src": "15569:11:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "3635353335",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 65535",
                              "value": "65535"
                            },
                            "id": 4823,
                            "name": "Literal",
                            "src": "15581:5:23"
                          }
                        ],
                        "id": 4824,
                        "name": "ArrayTypeName",
                        "src": "15569:18:23"
                      }
                    ],
                    "id": 4825,
                    "name": "VariableDeclaration",
                    "src": "15569:31:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "time",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 4826,
                        "name": "ElementaryTypeName",
                        "src": "15610:6:23"
                      }
                    ],
                    "id": 4827,
                    "name": "VariableDeclaration",
                    "src": "15610:11:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "secondsAgos",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint32[]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "uint32[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint32",
                              "type": "uint32"
                            },
                            "id": 4828,
                            "name": "ElementaryTypeName",
                            "src": "15631:6:23"
                          }
                        ],
                        "id": 4829,
                        "name": "ArrayTypeName",
                        "src": "15631:8:23"
                      }
                    ],
                    "id": 4830,
                    "name": "VariableDeclaration",
                    "src": "15631:27:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tick",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 4831,
                        "name": "ElementaryTypeName",
                        "src": "15668:5:23"
                      }
                    ],
                    "id": 4832,
                    "name": "VariableDeclaration",
                    "src": "15668:10:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "index",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4833,
                        "name": "ElementaryTypeName",
                        "src": "15688:6:23"
                      }
                    ],
                    "id": 4834,
                    "name": "VariableDeclaration",
                    "src": "15688:12:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidity",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint128",
                          "type": "uint128"
                        },
                        "id": 4835,
                        "name": "ElementaryTypeName",
                        "src": "15710:7:23"
                      }
                    ],
                    "id": 4836,
                    "name": "VariableDeclaration",
                    "src": "15710:17:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "cardinality",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint16",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint16",
                          "type": "uint16"
                        },
                        "id": 4837,
                        "name": "ElementaryTypeName",
                        "src": "15737:6:23"
                      }
                    ],
                    "id": 4838,
                    "name": "VariableDeclaration",
                    "src": "15737:18:23"
                  }
                ],
                "id": 4839,
                "name": "ParameterList",
                "src": "15559:202:23"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tickCumulatives",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "int56[]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "int56[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "int56",
                              "type": "int56"
                            },
                            "id": 4840,
                            "name": "ElementaryTypeName",
                            "src": "15785:5:23"
                          }
                        ],
                        "id": 4841,
                        "name": "ArrayTypeName",
                        "src": "15785:7:23"
                      }
                    ],
                    "id": 4842,
                    "name": "VariableDeclaration",
                    "src": "15785:30:23"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "secondsPerLiquidityCumulativeX128s",
                      "scope": 4906,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint160[]",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "uint160[]"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint160",
                              "type": "uint160"
                            },
                            "id": 4843,
                            "name": "ElementaryTypeName",
                            "src": "15817:7:23"
                          }
                        ],
                        "id": 4844,
                        "name": "ArrayTypeName",
                        "src": "15817:9:23"
                      }
                    ],
                    "id": 4845,
                    "name": "VariableDeclaration",
                    "src": "15817:51:23"
                  }
                ],
                "id": 4846,
                "name": "ParameterList",
                "src": "15784:85:23"
              },
              {
                "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"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_8d61ecf6e15472e15b1a0f63cd77f62aa57e6edcd3871d7a841f1056fb42b216",
                                  "typeString": "literal_string \"I\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4847,
                            "name": "Identifier",
                            "src": "15880:7:23"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4838,
                                  "type": "uint16",
                                  "value": "cardinality"
                                },
                                "id": 4848,
                                "name": "Identifier",
                                "src": "15888:11:23"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4849,
                                "name": "Literal",
                                "src": "15902:1:23"
                              }
                            ],
                            "id": 4850,
                            "name": "BinaryOperation",
                            "src": "15888:15:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "49",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"I\"",
                              "value": "I"
                            },
                            "id": 4851,
                            "name": "Literal",
                            "src": "15905:3:23"
                          }
                        ],
                        "id": 4852,
                        "name": "FunctionCall",
                        "src": "15880:29:23"
                      }
                    ],
                    "id": 4853,
                    "name": "ExpressionStatement",
                    "src": "15880:29:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "int56[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4842,
                              "type": "int56[] memory",
                              "value": "tickCumulatives"
                            },
                            "id": 4854,
                            "name": "Identifier",
                            "src": "15920:15:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "int56[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "function (uint256) pure returns (int56[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "type": "int56[]"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "int56",
                                          "type": "int56"
                                        },
                                        "id": 4855,
                                        "name": "ElementaryTypeName",
                                        "src": "15942:5:23"
                                      }
                                    ],
                                    "id": 4856,
                                    "name": "ArrayTypeName",
                                    "src": "15942:7:23"
                                  }
                                ],
                                "id": 4857,
                                "name": "NewExpression",
                                "src": "15938:11:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4830,
                                      "type": "uint32[] memory",
                                      "value": "secondsAgos"
                                    },
                                    "id": 4858,
                                    "name": "Identifier",
                                    "src": "15950:11:23"
                                  }
                                ],
                                "id": 4859,
                                "name": "MemberAccess",
                                "src": "15950:18:23"
                              }
                            ],
                            "id": 4860,
                            "name": "FunctionCall",
                            "src": "15938:31:23"
                          }
                        ],
                        "id": 4861,
                        "name": "Assignment",
                        "src": "15920:49:23"
                      }
                    ],
                    "id": 4862,
                    "name": "ExpressionStatement",
                    "src": "15920:49:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint160[] memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4845,
                              "type": "uint160[] memory",
                              "value": "secondsPerLiquidityCumulativeX128s"
                            },
                            "id": 4863,
                            "name": "Identifier",
                            "src": "15979:34:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint160[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "function (uint256) pure returns (uint160[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "type": "uint160[]"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint160",
                                          "type": "uint160"
                                        },
                                        "id": 4864,
                                        "name": "ElementaryTypeName",
                                        "src": "16020:7:23"
                                      }
                                    ],
                                    "id": 4865,
                                    "name": "ArrayTypeName",
                                    "src": "16020:9:23"
                                  }
                                ],
                                "id": 4866,
                                "name": "NewExpression",
                                "src": "16016:13:23"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4830,
                                      "type": "uint32[] memory",
                                      "value": "secondsAgos"
                                    },
                                    "id": 4867,
                                    "name": "Identifier",
                                    "src": "16030:11:23"
                                  }
                                ],
                                "id": 4868,
                                "name": "MemberAccess",
                                "src": "16030:18:23"
                              }
                            ],
                            "id": 4869,
                            "name": "FunctionCall",
                            "src": "16016:33:23"
                          }
                        ],
                        "id": 4870,
                        "name": "Assignment",
                        "src": "15979:70:23"
                      }
                    ],
                    "id": 4871,
                    "name": "ExpressionStatement",
                    "src": "15979:70:23"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "assignments": [
                            4873
                          ]
                        },
                        "children": [
                          {
                            "attributes": {
                              "constant": false,
                              "mutability": "mutable",
                              "name": "i",
                              "scope": 4904,
                              "stateVariable": false,
                              "storageLocation": "default",
                              "type": "uint256",
                              "visibility": "internal"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint256",
                                  "type": "uint256"
                                },
                                "id": 4872,
                                "name": "ElementaryTypeName",
                                "src": "16064:7:23"
                              }
                            ],
                            "id": 4873,
                            "name": "VariableDeclaration",
                            "src": "16064:9:23"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4874,
                            "name": "Literal",
                            "src": "16076:1:23"
                          }
                        ],
                        "id": 4875,
                        "name": "VariableDeclarationStatement",
                        "src": "16064:13:23"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4873,
                              "type": "uint256",
                              "value": "i"
                            },
                            "id": 4876,
                            "name": "Identifier",
                            "src": "16079:1:23"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4830,
                                  "type": "uint32[] memory",
                                  "value": "secondsAgos"
                                },
                                "id": 4877,
                                "name": "Identifier",
                                "src": "16083:11:23"
                              }
                            ],
                            "id": 4878,
                            "name": "MemberAccess",
                            "src": "16083:18:23"
                          }
                        ],
                        "id": 4879,
                        "name": "BinaryOperation",
                        "src": "16079:22:23"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4873,
                                  "type": "uint256",
                                  "value": "i"
                                },
                                "id": 4880,
                                "name": "Identifier",
                                "src": "16103:1:23"
                              }
                            ],
                            "id": 4881,
                            "name": "UnaryOperation",
                            "src": "16103:3:23"
                          }
                        ],
                        "id": 4882,
                        "name": "ExpressionStatement",
                        "src": "16103:3:23"
                      },
                      {
                        "children": [
                          {
                            "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(int56,uint160)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "type": "int56"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4842,
                                              "type": "int56[] memory",
                                              "value": "tickCumulatives"
                                            },
                                            "id": 4883,
                                            "name": "Identifier",
                                            "src": "16123:15:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4873,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 4884,
                                            "name": "Identifier",
                                            "src": "16139:1:23"
                                          }
                                        ],
                                        "id": 4885,
                                        "name": "IndexAccess",
                                        "src": "16123:18:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "type": "uint160"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4845,
                                              "type": "uint160[] memory",
                                              "value": "secondsPerLiquidityCumulativeX128s"
                                            },
                                            "id": 4886,
                                            "name": "Identifier",
                                            "src": "16143:34:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4873,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 4887,
                                            "name": "Identifier",
                                            "src": "16178:1:23"
                                          }
                                        ],
                                        "id": 4888,
                                        "name": "IndexAccess",
                                        "src": "16143:37:23"
                                      }
                                    ],
                                    "id": 4889,
                                    "name": "TupleExpression",
                                    "src": "16122:59:23"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "tuple(int56,uint160)",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_array$_t_struct$_Observation_$4184_storage_$65535_storage_ptr",
                                              "typeString": "struct Oracle.Observation storage ref[65535] storage pointer"
                                            },
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            },
                                            {
                                              "typeIdentifier": "t_uint32",
                                              "typeString": "uint32"
                                            },
                                            {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            },
                                            {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            },
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            },
                                            {
                                              "typeIdentifier": "t_uint16",
                                              "typeString": "uint16"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4820,
                                          "type": "function (struct Oracle.Observation storage ref[65535] storage pointer,uint32,uint32,int24,uint16,uint128,uint16) view returns (int56,uint160)",
                                          "value": "observeSingle"
                                        },
                                        "id": 4890,
                                        "name": "Identifier",
                                        "src": "16184:13:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4825,
                                          "type": "struct Oracle.Observation storage ref[65535] storage pointer",
                                          "value": "self"
                                        },
                                        "id": 4891,
                                        "name": "Identifier",
                                        "src": "16215:4:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4827,
                                          "type": "uint32",
                                          "value": "time"
                                        },
                                        "id": 4892,
                                        "name": "Identifier",
                                        "src": "16237:4:23"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4830,
                                              "type": "uint32[] memory",
                                              "value": "secondsAgos"
                                            },
                                            "id": 4893,
                                            "name": "Identifier",
                                            "src": "16259:11:23"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4873,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 4894,
                                            "name": "Identifier",
                                            "src": "16271:1:23"
                                          }
                                        ],
                                        "id": 4895,
                                        "name": "IndexAccess",
                                        "src": "16259:14:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4832,
                                          "type": "int24",
                                          "value": "tick"
                                        },
                                        "id": 4896,
                                        "name": "Identifier",
                                        "src": "16291:4:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4834,
                                          "type": "uint16",
                                          "value": "index"
                                        },
                                        "id": 4897,
                                        "name": "Identifier",
                                        "src": "16313:5:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4836,
                                          "type": "uint128",
                                          "value": "liquidity"
                                        },
                                        "id": 4898,
                                        "name": "Identifier",
                                        "src": "16336:9:23"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4838,
                                          "type": "uint16",
                                          "value": "cardinality"
                                        },
                                        "id": 4899,
                                        "name": "Identifier",
                                        "src": "16363:11:23"
                                      }
                                    ],
                                    "id": 4900,
                                    "name": "FunctionCall",
                                    "src": "16184:204:23"
                                  }
                                ],
                                "id": 4901,
                                "name": "Assignment",
                                "src": "16122:266:23"
                              }
                            ],
                            "id": 4902,
                            "name": "ExpressionStatement",
                            "src": "16122:266:23"
                          }
                        ],
                        "id": 4903,
                        "name": "Block",
                        "src": "16108:291:23"
                      }
                    ],
                    "id": 4904,
                    "name": "ForStatement",
                    "src": "16059:340:23"
                  }
                ],
                "id": 4905,
                "name": "Block",
                "src": "15870:535:23"
              }
            ],
            "id": 4906,
            "name": "FunctionDefinition",
            "src": "15543:862:23"
          }
        ],
        "id": 4907,
        "name": "ContractDefinition",
        "src": "676:15731:23"
      }
    ],
    "id": 4908,
    "name": "SourceUnit",
    "src": "37:16371:23"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2022-01-17T20:05:41.764Z",
  "devdoc": {
    "details": "Instances of stored oracle data, \"observations\", are collected in the oracle array Every pool is initialized with an oracle array length of 1. Anyone can pay the SSTOREs to increase the maximum length of the oracle array. New slots will be added when the array is fully populated. Observations are overwritten when the full length of the oracle array is populated. The most recent observation is available, independent of the length of the oracle array, by passing 0 to observe()",
    "kind": "dev",
    "methods": {},
    "title": "Oracle",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "Provides price and liquidity data useful for a wide variety of system designs",
    "version": 1
  }
}