{
  "contractName": "Position",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Positions store additional state for tracking fees owed to the position\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Position\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Positions represent an owner address' liquidity between a lower and upper tick boundary\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Position.sol\":\"Position\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint128.sol\":{\"keccak256\":\"0x2d1f4f73ae0d8f0a210b8d30084659b57c56ac8f2f96011fca36f00a6d417178\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2ba88933f16cd2df398e19c6ad227268f83c03081b70d243c97116d2ed9bc241\",\"dweb:/ipfs/QmTUGxdh8snzEM9VrTSS47StCg9VVWvvLJtJeNnMTFY4xb\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0xe511530871deaef86692cea9adb6076d26d7b47fd4815ce51af52af981026057\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc5a6ae776be3e7dcbd23d49ffbc9d792fed0ddf4b111ebb64b9bb2133ec263e\",\"dweb:/ipfs/QmbAUtWqvipzEARQpFpkzYKBELy3qeW5WXnZxHFU84sxG7\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LiquidityMath.sol\":{\"keccak256\":\"0x2fcb84bece328675849d09dee9439901fd14c852efa2cb84a7dd1ada04a90a1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce303eb639ca62f247a8a49a65f15b25b931fbd64b176c2180a6ea790f99bb11\",\"dweb:/ipfs/QmXehfxvPATibRJ2JWWBnLbDyA7hMk5jWCxidpJfDKGQVD\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Position.sol\":{\"keccak256\":\"0x7fb1a35fcc8b2104f1899d98cd1ce49b5e3af1bdad9da28a5bcda1d4081465e9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://28f43918f6528913abe8586ea4607281b97cdce35f869ae86369487c6ee6eb6c\",\"dweb:/ipfs/QmTgTRMZ5FQT2MCkgUmuhGbt39uyoiVwgXWNJbzoZqiC4f\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e4facc33b5bc1067e6aaf0115beefac4a186beffa3d0877e757cce5f9b050ae564736f6c63430007060033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e4facc33b5bc1067e6aaf0115beefac4a186beffa3d0877e757cce5f9b050ae564736f6c63430007060033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "350:3224:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "350:3224:24:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: BUSL-1.1\npragma solidity >=0.5.0;\n\nimport './FullMath.sol';\nimport './FixedPoint128.sol';\nimport './LiquidityMath.sol';\n\n/// @title Position\n/// @notice Positions represent an owner address' liquidity between a lower and upper tick boundary\n/// @dev Positions store additional state for tracking fees owed to the position\nlibrary Position {\n    // info stored for each user's position\n    struct Info {\n        // the amount of liquidity owned by this position\n        uint128 liquidity;\n        // fee growth per unit of liquidity as of the last update to liquidity or fees owed\n        uint256 feeGrowthInside0LastX128;\n        uint256 feeGrowthInside1LastX128;\n        // the fees owed to the position owner in token0/token1\n        uint128 tokensOwed0;\n        uint128 tokensOwed1;\n    }\n\n    /// @notice Returns the Info struct of a position, given an owner and position boundaries\n    /// @param self The mapping containing all user positions\n    /// @param owner The address of the position owner\n    /// @param tickLower The lower tick boundary of the position\n    /// @param tickUpper The upper tick boundary of the position\n    /// @return position The position info struct of the given owners' position\n    function get(\n        mapping(bytes32 => Info) storage self,\n        address owner,\n        int24 tickLower,\n        int24 tickUpper\n    ) internal view returns (Position.Info storage position) {\n        position = self[keccak256(abi.encodePacked(owner, tickLower, tickUpper))];\n    }\n\n    /// @notice Credits accumulated fees to a user's position\n    /// @param self The individual position to update\n    /// @param liquidityDelta The change in pool liquidity as a result of the position update\n    /// @param feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries\n    /// @param feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries\n    function update(\n        Info storage self,\n        int128 liquidityDelta,\n        uint256 feeGrowthInside0X128,\n        uint256 feeGrowthInside1X128\n    ) internal {\n        Info memory _self = self;\n\n        uint128 liquidityNext;\n        if (liquidityDelta == 0) {\n            require(_self.liquidity > 0, 'NP'); // disallow pokes for 0 liquidity positions\n            liquidityNext = _self.liquidity;\n        } else {\n            liquidityNext = LiquidityMath.addDelta(_self.liquidity, liquidityDelta);\n        }\n\n        // calculate accumulated fees\n        uint128 tokensOwed0 =\n            uint128(\n                FullMath.mulDiv(\n                    feeGrowthInside0X128 - _self.feeGrowthInside0LastX128,\n                    _self.liquidity,\n                    FixedPoint128.Q128\n                )\n            );\n        uint128 tokensOwed1 =\n            uint128(\n                FullMath.mulDiv(\n                    feeGrowthInside1X128 - _self.feeGrowthInside1LastX128,\n                    _self.liquidity,\n                    FixedPoint128.Q128\n                )\n            );\n\n        // update the position\n        if (liquidityDelta != 0) self.liquidity = liquidityNext;\n        self.feeGrowthInside0LastX128 = feeGrowthInside0X128;\n        self.feeGrowthInside1LastX128 = feeGrowthInside1X128;\n        if (tokensOwed0 > 0 || tokensOwed1 > 0) {\n            // overflow is acceptable, have to withdraw before you hit type(uint128).max fees\n            self.tokensOwed0 += tokensOwed0;\n            self.tokensOwed1 += tokensOwed1;\n        }\n    }\n}\n",
  "sourcePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Position.sol",
  "ast": {
    "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Position.sol",
    "exportedSymbols": {
      "FixedPoint128": [
        3807
      ],
      "FullMath": [
        3990
      ],
      "LiquidityMath": [
        4042
      ],
      "Position": [
        5080
      ]
    },
    "id": 5081,
    "license": "BUSL-1.1",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4909,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "37:24:24"
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FullMath.sol",
        "file": "./FullMath.sol",
        "id": 4910,
        "nodeType": "ImportDirective",
        "scope": 5081,
        "sourceUnit": 3991,
        "src": "63:24:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint128.sol",
        "file": "./FixedPoint128.sol",
        "id": 4911,
        "nodeType": "ImportDirective",
        "scope": 5081,
        "sourceUnit": 3808,
        "src": "88:29:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LiquidityMath.sol",
        "file": "./LiquidityMath.sol",
        "id": 4912,
        "nodeType": "ImportDirective",
        "scope": 5081,
        "sourceUnit": 4043,
        "src": "118:29:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 4913,
          "nodeType": "StructuredDocumentation",
          "src": "149:201:24",
          "text": "@title Position\n @notice Positions represent an owner address' liquidity between a lower and upper tick boundary\n @dev Positions store additional state for tracking fees owed to the position"
        },
        "fullyImplemented": true,
        "id": 5080,
        "linearizedBaseContracts": [
          5080
        ],
        "name": "Position",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "Position.Info",
            "id": 4924,
            "members": [
              {
                "constant": false,
                "id": 4915,
                "mutability": "mutable",
                "name": "liquidity",
                "nodeType": "VariableDeclaration",
                "scope": 4924,
                "src": "497:17:24",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 4914,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "497:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4917,
                "mutability": "mutable",
                "name": "feeGrowthInside0LastX128",
                "nodeType": "VariableDeclaration",
                "scope": 4924,
                "src": "616:32:24",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4916,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "616:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4919,
                "mutability": "mutable",
                "name": "feeGrowthInside1LastX128",
                "nodeType": "VariableDeclaration",
                "scope": 4924,
                "src": "658:32:24",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 4918,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "658:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4921,
                "mutability": "mutable",
                "name": "tokensOwed0",
                "nodeType": "VariableDeclaration",
                "scope": 4924,
                "src": "764:19:24",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 4920,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "764:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 4923,
                "mutability": "mutable",
                "name": "tokensOwed1",
                "nodeType": "VariableDeclaration",
                "scope": 4924,
                "src": "793:19:24",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 4922,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "793:7:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Info",
            "nodeType": "StructDefinition",
            "scope": 5080,
            "src": "417:402:24",
            "visibility": "public"
          },
          {
            "body": {
              "id": 4953,
              "nodeType": "Block",
              "src": "1440:90:24",
              "statements": [
                {
                  "expression": {
                    "id": 4951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4940,
                      "name": "position",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4938,
                      "src": "1450:8:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                        "typeString": "struct Position.Info storage pointer"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 4941,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4929,
                        "src": "1461:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Info_$4924_storage_$",
                          "typeString": "mapping(bytes32 => struct Position.Info storage ref)"
                        }
                      },
                      "id": 4950,
                      "indexExpression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 4945,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4931,
                                "src": "1493:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 4946,
                                "name": "tickLower",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4933,
                                "src": "1500:9:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              },
                              {
                                "id": 4947,
                                "name": "tickUpper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4935,
                                "src": "1511:9:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                },
                                {
                                  "typeIdentifier": "t_int24",
                                  "typeString": "int24"
                                }
                              ],
                              "expression": {
                                "id": 4943,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967295,
                                "src": "1476:3:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 4944,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "src": "1476:16:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 4948,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1476:45:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 4942,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967288,
                          "src": "1466:9:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 4949,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1466:56:24",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "1461:62:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Info_$4924_storage",
                        "typeString": "struct Position.Info storage ref"
                      }
                    },
                    "src": "1450:73:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                      "typeString": "struct Position.Info storage pointer"
                    }
                  },
                  "id": 4952,
                  "nodeType": "ExpressionStatement",
                  "src": "1450:73:24"
                }
              ]
            },
            "documentation": {
              "id": 4925,
              "nodeType": "StructuredDocumentation",
              "src": "825:416:24",
              "text": "@notice Returns the Info struct of a position, given an owner and position boundaries\n @param self The mapping containing all user positions\n @param owner The address of the position owner\n @param tickLower The lower tick boundary of the position\n @param tickUpper The upper tick boundary of the position\n @return position The position info struct of the given owners' position"
            },
            "id": 4954,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "get",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4936,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4929,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4954,
                  "src": "1268:37:24",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Info_$4924_storage_$",
                    "typeString": "mapping(bytes32 => struct Position.Info)"
                  },
                  "typeName": {
                    "id": 4928,
                    "keyType": {
                      "id": 4926,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1276:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1268:24:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Info_$4924_storage_$",
                      "typeString": "mapping(bytes32 => struct Position.Info)"
                    },
                    "valueType": {
                      "id": 4927,
                      "name": "Info",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 4924,
                      "src": "1287:4:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                        "typeString": "struct Position.Info"
                      }
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4931,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 4954,
                  "src": "1315:13:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4930,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1315:7:24",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4933,
                  "mutability": "mutable",
                  "name": "tickLower",
                  "nodeType": "VariableDeclaration",
                  "scope": 4954,
                  "src": "1338:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4932,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1338:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4935,
                  "mutability": "mutable",
                  "name": "tickUpper",
                  "nodeType": "VariableDeclaration",
                  "scope": 4954,
                  "src": "1363:15:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int24",
                    "typeString": "int24"
                  },
                  "typeName": {
                    "id": 4934,
                    "name": "int24",
                    "nodeType": "ElementaryTypeName",
                    "src": "1363:5:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int24",
                      "typeString": "int24"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1258:126:24"
            },
            "returnParameters": {
              "id": 4939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4938,
                  "mutability": "mutable",
                  "name": "position",
                  "nodeType": "VariableDeclaration",
                  "scope": 4954,
                  "src": "1408:30:24",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                    "typeString": "struct Position.Info"
                  },
                  "typeName": {
                    "id": 4937,
                    "name": "Position.Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4924,
                    "src": "1408:13:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                      "typeString": "struct Position.Info"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1407:32:24"
            },
            "scope": 5080,
            "src": "1246:284:24",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5078,
              "nodeType": "Block",
              "src": "2175:1397:24",
              "statements": [
                {
                  "assignments": [
                    4967
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4967,
                      "mutability": "mutable",
                      "name": "_self",
                      "nodeType": "VariableDeclaration",
                      "scope": 5078,
                      "src": "2185:17:24",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                        "typeString": "struct Position.Info"
                      },
                      "typeName": {
                        "id": 4966,
                        "name": "Info",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4924,
                        "src": "2185:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                          "typeString": "struct Position.Info"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4969,
                  "initialValue": {
                    "id": 4968,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4957,
                    "src": "2205:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                      "typeString": "struct Position.Info storage pointer"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2185:24:24"
                },
                {
                  "assignments": [
                    4971
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4971,
                      "mutability": "mutable",
                      "name": "liquidityNext",
                      "nodeType": "VariableDeclaration",
                      "scope": 5078,
                      "src": "2220:21:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 4970,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "2220:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4972,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2220:21:24"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_int128",
                      "typeString": "int128"
                    },
                    "id": 4975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4973,
                      "name": "liquidityDelta",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4959,
                      "src": "2255:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int128",
                        "typeString": "int128"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2273:1:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2255:19:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4999,
                    "nodeType": "Block",
                    "src": "2430:96:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 4997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4990,
                            "name": "liquidityNext",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4971,
                            "src": "2444:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4993,
                                  "name": "_self",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4967,
                                  "src": "2483:5:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                                    "typeString": "struct Position.Info memory"
                                  }
                                },
                                "id": 4994,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "liquidity",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4915,
                                "src": "2483:15:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              {
                                "id": 4995,
                                "name": "liquidityDelta",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4959,
                                "src": "2500:14:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int128",
                                  "typeString": "int128"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                },
                                {
                                  "typeIdentifier": "t_int128",
                                  "typeString": "int128"
                                }
                              ],
                              "expression": {
                                "id": 4991,
                                "name": "LiquidityMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4042,
                                "src": "2460:13:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_LiquidityMath_$4042_$",
                                  "typeString": "type(library LiquidityMath)"
                                }
                              },
                              "id": 4992,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addDelta",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4041,
                              "src": "2460:22:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_int128_$returns$_t_uint128_$",
                                "typeString": "function (uint128,int128) pure returns (uint128)"
                              }
                            },
                            "id": 4996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2460:55:24",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "2444:71:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 4998,
                        "nodeType": "ExpressionStatement",
                        "src": "2444:71:24"
                      }
                    ]
                  },
                  "id": 5000,
                  "nodeType": "IfStatement",
                  "src": "2251:275:24",
                  "trueBody": {
                    "id": 4989,
                    "nodeType": "Block",
                    "src": "2276:148:24",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 4980,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 4977,
                                  "name": "_self",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4967,
                                  "src": "2298:5:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                                    "typeString": "struct Position.Info memory"
                                  }
                                },
                                "id": 4978,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "liquidity",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4915,
                                "src": "2298:15:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 4979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2316:1:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2298:19:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4e50",
                              "id": 4981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2319:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ebb814de87c671cfe97a338672e9700a9288a1a6d16839e238618b2b7f2aa86d",
                                "typeString": "literal_string \"NP\""
                              },
                              "value": "NP"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ebb814de87c671cfe97a338672e9700a9288a1a6d16839e238618b2b7f2aa86d",
                                "typeString": "literal_string \"NP\""
                              }
                            ],
                            "id": 4976,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "2290:7:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2290:34:24",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4983,
                        "nodeType": "ExpressionStatement",
                        "src": "2290:34:24"
                      },
                      {
                        "expression": {
                          "id": 4987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4984,
                            "name": "liquidityNext",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4971,
                            "src": "2382:13:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 4985,
                              "name": "_self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4967,
                              "src": "2398:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                                "typeString": "struct Position.Info memory"
                              }
                            },
                            "id": 4986,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "liquidity",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4915,
                            "src": "2398:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "2382:31:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 4988,
                        "nodeType": "ExpressionStatement",
                        "src": "2382:31:24"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5002,
                      "mutability": "mutable",
                      "name": "tokensOwed0",
                      "nodeType": "VariableDeclaration",
                      "scope": 5078,
                      "src": "2574:19:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 5001,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "2574:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5017,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5010,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5007,
                              "name": "feeGrowthInside0X128",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4961,
                              "src": "2670:20:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "id": 5008,
                                "name": "_self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4967,
                                "src": "2693:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                                  "typeString": "struct Position.Info memory"
                                }
                              },
                              "id": 5009,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "feeGrowthInside0LastX128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4917,
                              "src": "2693:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2670:53:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "expression": {
                              "id": 5011,
                              "name": "_self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4967,
                              "src": "2745:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                                "typeString": "struct Position.Info memory"
                              }
                            },
                            "id": 5012,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "liquidity",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4915,
                            "src": "2745:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "expression": {
                              "id": 5013,
                              "name": "FixedPoint128",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3807,
                              "src": "2782:13:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FixedPoint128_$3807_$",
                                "typeString": "type(library FixedPoint128)"
                              }
                            },
                            "id": 5014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "Q128",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3806,
                            "src": "2782:18:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 5005,
                            "name": "FullMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3990,
                            "src": "2633:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                              "typeString": "type(library FullMath)"
                            }
                          },
                          "id": 5006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mulDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3946,
                          "src": "2633:15:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5015,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2633:185:24",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2608:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint128_$",
                        "typeString": "type(uint128)"
                      },
                      "typeName": {
                        "id": 5003,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "2608:7:24",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5016,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2608:224:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2574:258:24"
                },
                {
                  "assignments": [
                    5019
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5019,
                      "mutability": "mutable",
                      "name": "tokensOwed1",
                      "nodeType": "VariableDeclaration",
                      "scope": 5078,
                      "src": "2842:19:24",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 5018,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "2842:7:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5034,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5027,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5024,
                              "name": "feeGrowthInside1X128",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4963,
                              "src": "2938:20:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "id": 5025,
                                "name": "_self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4967,
                                "src": "2961:5:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                                  "typeString": "struct Position.Info memory"
                                }
                              },
                              "id": 5026,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "feeGrowthInside1LastX128",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4919,
                              "src": "2961:30:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2938:53:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "expression": {
                              "id": 5028,
                              "name": "_self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4967,
                              "src": "3013:5:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$4924_memory_ptr",
                                "typeString": "struct Position.Info memory"
                              }
                            },
                            "id": 5029,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "liquidity",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4915,
                            "src": "3013:15:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          {
                            "expression": {
                              "id": 5030,
                              "name": "FixedPoint128",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3807,
                              "src": "3050:13:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FixedPoint128_$3807_$",
                                "typeString": "type(library FixedPoint128)"
                              }
                            },
                            "id": 5031,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "Q128",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3806,
                            "src": "3050:18:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 5022,
                            "name": "FullMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3990,
                            "src": "2901:8:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FullMath_$3990_$",
                              "typeString": "type(library FullMath)"
                            }
                          },
                          "id": 5023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mulDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3946,
                          "src": "2901:15:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 5032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2901:185:24",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2876:7:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint128_$",
                        "typeString": "type(uint128)"
                      },
                      "typeName": {
                        "id": 5020,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "2876:7:24",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2876:224:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2842:258:24"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_int128",
                      "typeString": "int128"
                    },
                    "id": 5037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5035,
                      "name": "liquidityDelta",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4959,
                      "src": "3146:14:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int128",
                        "typeString": "int128"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5036,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3164:1:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3146:19:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5044,
                  "nodeType": "IfStatement",
                  "src": "3142:55:24",
                  "trueBody": {
                    "expression": {
                      "id": 5042,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "expression": {
                          "id": 5038,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4957,
                          "src": "3167:4:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                            "typeString": "struct Position.Info storage pointer"
                          }
                        },
                        "id": 5040,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "liquidity",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4915,
                        "src": "3167:14:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "id": 5041,
                        "name": "liquidityNext",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4971,
                        "src": "3184:13:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "src": "3167:30:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "id": 5043,
                    "nodeType": "ExpressionStatement",
                    "src": "3167:30:24"
                  }
                },
                {
                  "expression": {
                    "id": 5049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 5045,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4957,
                        "src": "3207:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                          "typeString": "struct Position.Info storage pointer"
                        }
                      },
                      "id": 5047,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "feeGrowthInside0LastX128",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4917,
                      "src": "3207:29:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5048,
                      "name": "feeGrowthInside0X128",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4961,
                      "src": "3239:20:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3207:52:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5050,
                  "nodeType": "ExpressionStatement",
                  "src": "3207:52:24"
                },
                {
                  "expression": {
                    "id": 5055,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 5051,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4957,
                        "src": "3269:4:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                          "typeString": "struct Position.Info storage pointer"
                        }
                      },
                      "id": 5053,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "feeGrowthInside1LastX128",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4919,
                      "src": "3269:29:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5054,
                      "name": "feeGrowthInside1X128",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4963,
                      "src": "3301:20:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3269:52:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5056,
                  "nodeType": "ExpressionStatement",
                  "src": "3269:52:24"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "id": 5059,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5057,
                        "name": "tokensOwed0",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5002,
                        "src": "3335:11:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 5058,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3349:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "3335:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "id": 5062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5060,
                        "name": "tokensOwed1",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5019,
                        "src": "3354:11:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 5061,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3368:1:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "3354:15:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3335:34:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5077,
                  "nodeType": "IfStatement",
                  "src": "3331:235:24",
                  "trueBody": {
                    "id": 5076,
                    "nodeType": "Block",
                    "src": "3371:195:24",
                    "statements": [
                      {
                        "expression": {
                          "id": 5068,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 5064,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4957,
                              "src": "3479:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                                "typeString": "struct Position.Info storage pointer"
                              }
                            },
                            "id": 5066,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "tokensOwed0",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4921,
                            "src": "3479:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 5067,
                            "name": "tokensOwed0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5002,
                            "src": "3499:11:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "3479:31:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 5069,
                        "nodeType": "ExpressionStatement",
                        "src": "3479:31:24"
                      },
                      {
                        "expression": {
                          "id": 5074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 5070,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4957,
                              "src": "3524:4:24",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                                "typeString": "struct Position.Info storage pointer"
                              }
                            },
                            "id": 5072,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "tokensOwed1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4923,
                            "src": "3524:16:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "id": 5073,
                            "name": "tokensOwed1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5019,
                            "src": "3544:11:24",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "3524:31:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "id": 5075,
                        "nodeType": "ExpressionStatement",
                        "src": "3524:31:24"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4955,
              "nodeType": "StructuredDocumentation",
              "src": "1536:469:24",
              "text": "@notice Credits accumulated fees to a user's position\n @param self The individual position to update\n @param liquidityDelta The change in pool liquidity as a result of the position update\n @param feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries\n @param feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries"
            },
            "id": 5079,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "update",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4964,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4957,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 5079,
                  "src": "2035:17:24",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                    "typeString": "struct Position.Info"
                  },
                  "typeName": {
                    "id": 4956,
                    "name": "Info",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4924,
                    "src": "2035:4:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Info_$4924_storage_ptr",
                      "typeString": "struct Position.Info"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4959,
                  "mutability": "mutable",
                  "name": "liquidityDelta",
                  "nodeType": "VariableDeclaration",
                  "scope": 5079,
                  "src": "2062:21:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int128",
                    "typeString": "int128"
                  },
                  "typeName": {
                    "id": 4958,
                    "name": "int128",
                    "nodeType": "ElementaryTypeName",
                    "src": "2062:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int128",
                      "typeString": "int128"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4961,
                  "mutability": "mutable",
                  "name": "feeGrowthInside0X128",
                  "nodeType": "VariableDeclaration",
                  "scope": 5079,
                  "src": "2093:28:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4960,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2093:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4963,
                  "mutability": "mutable",
                  "name": "feeGrowthInside1X128",
                  "nodeType": "VariableDeclaration",
                  "scope": 5079,
                  "src": "2131:28:24",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4962,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2131:7:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2025:140:24"
            },
            "returnParameters": {
              "id": 4965,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2175:0:24"
            },
            "scope": 5080,
            "src": "2010:1562:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 5081,
        "src": "350:3224:24"
      }
    ],
    "src": "37:3538:24"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/Position.sol",
      "exportedSymbols": {
        "FixedPoint128": [
          3807
        ],
        "FullMath": [
          3990
        ],
        "LiquidityMath": [
          4042
        ],
        "Position": [
          5080
        ]
      },
      "license": "BUSL-1.1"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.5",
            ".0"
          ]
        },
        "id": 4909,
        "name": "PragmaDirective",
        "src": "37:24:24"
      },
      {
        "attributes": {
          "SourceUnit": 3991,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FullMath.sol",
          "file": "./FullMath.sol",
          "scope": 5081,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4910,
        "name": "ImportDirective",
        "src": "63:24:24"
      },
      {
        "attributes": {
          "SourceUnit": 3808,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/FixedPoint128.sol",
          "file": "./FixedPoint128.sol",
          "scope": 5081,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4911,
        "name": "ImportDirective",
        "src": "88:29:24"
      },
      {
        "attributes": {
          "SourceUnit": 4043,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/MoonwalkerSwap-v1-Core/contracts/libraries/LiquidityMath.sol",
          "file": "./LiquidityMath.sol",
          "scope": 5081,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4912,
        "name": "ImportDirective",
        "src": "118:29:24"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            5080
          ],
          "name": "Position",
          "scope": 5081
        },
        "children": [
          {
            "attributes": {
              "text": "@title Position\n @notice Positions represent an owner address' liquidity between a lower and upper tick boundary\n @dev Positions store additional state for tracking fees owed to the position"
            },
            "id": 4913,
            "name": "StructuredDocumentation",
            "src": "149:201:24"
          },
          {
            "attributes": {
              "canonicalName": "Position.Info",
              "name": "Info",
              "scope": 5080,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "liquidity",
                  "scope": 4924,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint128",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint128",
                      "type": "uint128"
                    },
                    "id": 4914,
                    "name": "ElementaryTypeName",
                    "src": "497:7:24"
                  }
                ],
                "id": 4915,
                "name": "VariableDeclaration",
                "src": "497:17:24"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "feeGrowthInside0LastX128",
                  "scope": 4924,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 4916,
                    "name": "ElementaryTypeName",
                    "src": "616:7:24"
                  }
                ],
                "id": 4917,
                "name": "VariableDeclaration",
                "src": "616:32:24"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "feeGrowthInside1LastX128",
                  "scope": 4924,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 4918,
                    "name": "ElementaryTypeName",
                    "src": "658:7:24"
                  }
                ],
                "id": 4919,
                "name": "VariableDeclaration",
                "src": "658:32:24"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "tokensOwed0",
                  "scope": 4924,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint128",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint128",
                      "type": "uint128"
                    },
                    "id": 4920,
                    "name": "ElementaryTypeName",
                    "src": "764:7:24"
                  }
                ],
                "id": 4921,
                "name": "VariableDeclaration",
                "src": "764:19:24"
              },
              {
                "attributes": {
                  "constant": false,
                  "mutability": "mutable",
                  "name": "tokensOwed1",
                  "scope": 4924,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint128",
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint128",
                      "type": "uint128"
                    },
                    "id": 4922,
                    "name": "ElementaryTypeName",
                    "src": "793:7:24"
                  }
                ],
                "id": 4923,
                "name": "VariableDeclaration",
                "src": "793:19:24"
              }
            ],
            "id": 4924,
            "name": "StructDefinition",
            "src": "417:402:24"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "get",
              "scope": 5080,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Returns the Info struct of a position, given an owner and position boundaries\n @param self The mapping containing all user positions\n @param owner The address of the position owner\n @param tickLower The lower tick boundary of the position\n @param tickUpper The upper tick boundary of the position\n @return position The position info struct of the given owners' position"
                },
                "id": 4925,
                "name": "StructuredDocumentation",
                "src": "825:416:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 4954,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "mapping(bytes32 => struct Position.Info)",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "type": "mapping(bytes32 => struct Position.Info)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 4926,
                            "name": "ElementaryTypeName",
                            "src": "1276:7:24"
                          },
                          {
                            "attributes": {
                              "name": "Info",
                              "referencedDeclaration": 4924,
                              "type": "struct Position.Info"
                            },
                            "id": 4927,
                            "name": "UserDefinedTypeName",
                            "src": "1287:4:24"
                          }
                        ],
                        "id": 4928,
                        "name": "Mapping",
                        "src": "1268:24:24"
                      }
                    ],
                    "id": 4929,
                    "name": "VariableDeclaration",
                    "src": "1268:37:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 4954,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4930,
                        "name": "ElementaryTypeName",
                        "src": "1315:7:24"
                      }
                    ],
                    "id": 4931,
                    "name": "VariableDeclaration",
                    "src": "1315:13:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tickLower",
                      "scope": 4954,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 4932,
                        "name": "ElementaryTypeName",
                        "src": "1338:5:24"
                      }
                    ],
                    "id": 4933,
                    "name": "VariableDeclaration",
                    "src": "1338:15:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tickUpper",
                      "scope": 4954,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int24",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int24",
                          "type": "int24"
                        },
                        "id": 4934,
                        "name": "ElementaryTypeName",
                        "src": "1363:5:24"
                      }
                    ],
                    "id": 4935,
                    "name": "VariableDeclaration",
                    "src": "1363:15:24"
                  }
                ],
                "id": 4936,
                "name": "ParameterList",
                "src": "1258:126:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "position",
                      "scope": 4954,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Position.Info",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Position.Info",
                          "referencedDeclaration": 4924,
                          "type": "struct Position.Info"
                        },
                        "id": 4937,
                        "name": "UserDefinedTypeName",
                        "src": "1408:13:24"
                      }
                    ],
                    "id": 4938,
                    "name": "VariableDeclaration",
                    "src": "1408:30:24"
                  }
                ],
                "id": 4939,
                "name": "ParameterList",
                "src": "1407:32:24"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "struct Position.Info storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4938,
                              "type": "struct Position.Info storage pointer",
                              "value": "position"
                            },
                            "id": 4940,
                            "name": "Identifier",
                            "src": "1450:8:24"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct Position.Info storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4929,
                                  "type": "mapping(bytes32 => struct Position.Info storage ref)",
                                  "value": "self"
                                },
                                "id": 4941,
                                "name": "Identifier",
                                "src": "1461:4:24"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4294967288,
                                      "type": "function (bytes memory) pure returns (bytes32)",
                                      "value": "keccak256"
                                    },
                                    "id": 4942,
                                    "name": "Identifier",
                                    "src": "1466:9:24"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            },
                                            {
                                              "typeIdentifier": "t_int24",
                                              "typeString": "int24"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "member_name": "encodePacked",
                                          "type": "function () pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4294967295,
                                              "type": "abi",
                                              "value": "abi"
                                            },
                                            "id": 4943,
                                            "name": "Identifier",
                                            "src": "1476:3:24"
                                          }
                                        ],
                                        "id": 4944,
                                        "name": "MemberAccess",
                                        "src": "1476:16:24"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4931,
                                          "type": "address",
                                          "value": "owner"
                                        },
                                        "id": 4945,
                                        "name": "Identifier",
                                        "src": "1493:5:24"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4933,
                                          "type": "int24",
                                          "value": "tickLower"
                                        },
                                        "id": 4946,
                                        "name": "Identifier",
                                        "src": "1500:9:24"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4935,
                                          "type": "int24",
                                          "value": "tickUpper"
                                        },
                                        "id": 4947,
                                        "name": "Identifier",
                                        "src": "1511:9:24"
                                      }
                                    ],
                                    "id": 4948,
                                    "name": "FunctionCall",
                                    "src": "1476:45:24"
                                  }
                                ],
                                "id": 4949,
                                "name": "FunctionCall",
                                "src": "1466:56:24"
                              }
                            ],
                            "id": 4950,
                            "name": "IndexAccess",
                            "src": "1461:62:24"
                          }
                        ],
                        "id": 4951,
                        "name": "Assignment",
                        "src": "1450:73:24"
                      }
                    ],
                    "id": 4952,
                    "name": "ExpressionStatement",
                    "src": "1450:73:24"
                  }
                ],
                "id": 4953,
                "name": "Block",
                "src": "1440:90:24"
              }
            ],
            "id": 4954,
            "name": "FunctionDefinition",
            "src": "1246:284:24"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "update",
              "scope": 5080,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Credits accumulated fees to a user's position\n @param self The individual position to update\n @param liquidityDelta The change in pool liquidity as a result of the position update\n @param feeGrowthInside0X128 The all-time fee growth in token0, per unit of liquidity, inside the position's tick boundaries\n @param feeGrowthInside1X128 The all-time fee growth in token1, per unit of liquidity, inside the position's tick boundaries"
                },
                "id": 4955,
                "name": "StructuredDocumentation",
                "src": "1536:469:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "self",
                      "scope": 5079,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Position.Info",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "Info",
                          "referencedDeclaration": 4924,
                          "type": "struct Position.Info"
                        },
                        "id": 4956,
                        "name": "UserDefinedTypeName",
                        "src": "2035:4:24"
                      }
                    ],
                    "id": 4957,
                    "name": "VariableDeclaration",
                    "src": "2035:17:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidityDelta",
                      "scope": 5079,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int128",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int128",
                          "type": "int128"
                        },
                        "id": 4958,
                        "name": "ElementaryTypeName",
                        "src": "2062:6:24"
                      }
                    ],
                    "id": 4959,
                    "name": "VariableDeclaration",
                    "src": "2062:21:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "feeGrowthInside0X128",
                      "scope": 5079,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4960,
                        "name": "ElementaryTypeName",
                        "src": "2093:7:24"
                      }
                    ],
                    "id": 4961,
                    "name": "VariableDeclaration",
                    "src": "2093:28:24"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "feeGrowthInside1X128",
                      "scope": 5079,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4962,
                        "name": "ElementaryTypeName",
                        "src": "2131:7:24"
                      }
                    ],
                    "id": 4963,
                    "name": "VariableDeclaration",
                    "src": "2131:28:24"
                  }
                ],
                "id": 4964,
                "name": "ParameterList",
                "src": "2025:140:24"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4965,
                "name": "ParameterList",
                "src": "2175:0:24"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4967
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_self",
                          "scope": 5078,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct Position.Info",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Info",
                              "referencedDeclaration": 4924,
                              "type": "struct Position.Info"
                            },
                            "id": 4966,
                            "name": "UserDefinedTypeName",
                            "src": "2185:4:24"
                          }
                        ],
                        "id": 4967,
                        "name": "VariableDeclaration",
                        "src": "2185:17:24"
                      },
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 4957,
                          "type": "struct Position.Info storage pointer",
                          "value": "self"
                        },
                        "id": 4968,
                        "name": "Identifier",
                        "src": "2205:4:24"
                      }
                    ],
                    "id": 4969,
                    "name": "VariableDeclarationStatement",
                    "src": "2185:24:24"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4971
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "liquidityNext",
                          "scope": 5078,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint128",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint128",
                              "type": "uint128"
                            },
                            "id": 4970,
                            "name": "ElementaryTypeName",
                            "src": "2220:7:24"
                          }
                        ],
                        "id": 4971,
                        "name": "VariableDeclaration",
                        "src": "2220:21:24"
                      }
                    ],
                    "id": 4972,
                    "name": "VariableDeclarationStatement",
                    "src": "2220:21:24"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4959,
                              "type": "int128",
                              "value": "liquidityDelta"
                            },
                            "id": 4973,
                            "name": "Identifier",
                            "src": "2255:14:24"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4974,
                            "name": "Literal",
                            "src": "2273:1:24"
                          }
                        ],
                        "id": 4975,
                        "name": "BinaryOperation",
                        "src": "2255:19:24"
                      },
                      {
                        "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_ebb814de87c671cfe97a338672e9700a9288a1a6d16839e238618b2b7f2aa86d",
                                          "typeString": "literal_string \"NP\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        4294967278,
                                        4294967278
                                      ],
                                      "referencedDeclaration": 4294967278,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 4976,
                                    "name": "Identifier",
                                    "src": "2290:7:24"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": ">",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "liquidity",
                                          "referencedDeclaration": 4915,
                                          "type": "uint128"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4967,
                                              "type": "struct Position.Info memory",
                                              "value": "_self"
                                            },
                                            "id": 4977,
                                            "name": "Identifier",
                                            "src": "2298:5:24"
                                          }
                                        ],
                                        "id": 4978,
                                        "name": "MemberAccess",
                                        "src": "2298:15:24"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 4979,
                                        "name": "Literal",
                                        "src": "2316:1:24"
                                      }
                                    ],
                                    "id": 4980,
                                    "name": "BinaryOperation",
                                    "src": "2298:19:24"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "4e50",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "string",
                                      "type": "literal_string \"NP\"",
                                      "value": "NP"
                                    },
                                    "id": 4981,
                                    "name": "Literal",
                                    "src": "2319:4:24"
                                  }
                                ],
                                "id": 4982,
                                "name": "FunctionCall",
                                "src": "2290:34:24"
                              }
                            ],
                            "id": 4983,
                            "name": "ExpressionStatement",
                            "src": "2290:34:24"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint128"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4971,
                                      "type": "uint128",
                                      "value": "liquidityNext"
                                    },
                                    "id": 4984,
                                    "name": "Identifier",
                                    "src": "2382:13:24"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "liquidity",
                                      "referencedDeclaration": 4915,
                                      "type": "uint128"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4967,
                                          "type": "struct Position.Info memory",
                                          "value": "_self"
                                        },
                                        "id": 4985,
                                        "name": "Identifier",
                                        "src": "2398:5:24"
                                      }
                                    ],
                                    "id": 4986,
                                    "name": "MemberAccess",
                                    "src": "2398:15:24"
                                  }
                                ],
                                "id": 4987,
                                "name": "Assignment",
                                "src": "2382:31:24"
                              }
                            ],
                            "id": 4988,
                            "name": "ExpressionStatement",
                            "src": "2382:31:24"
                          }
                        ],
                        "id": 4989,
                        "name": "Block",
                        "src": "2276:148:24"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint128"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4971,
                                      "type": "uint128",
                                      "value": "liquidityNext"
                                    },
                                    "id": 4990,
                                    "name": "Identifier",
                                    "src": "2444:13:24"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint128",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            },
                                            {
                                              "typeIdentifier": "t_int128",
                                              "typeString": "int128"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "addDelta",
                                          "referencedDeclaration": 4041,
                                          "type": "function (uint128,int128) pure returns (uint128)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4042,
                                              "type": "type(library LiquidityMath)",
                                              "value": "LiquidityMath"
                                            },
                                            "id": 4991,
                                            "name": "Identifier",
                                            "src": "2460:13:24"
                                          }
                                        ],
                                        "id": 4992,
                                        "name": "MemberAccess",
                                        "src": "2460:22:24"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "liquidity",
                                          "referencedDeclaration": 4915,
                                          "type": "uint128"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4967,
                                              "type": "struct Position.Info memory",
                                              "value": "_self"
                                            },
                                            "id": 4993,
                                            "name": "Identifier",
                                            "src": "2483:5:24"
                                          }
                                        ],
                                        "id": 4994,
                                        "name": "MemberAccess",
                                        "src": "2483:15:24"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4959,
                                          "type": "int128",
                                          "value": "liquidityDelta"
                                        },
                                        "id": 4995,
                                        "name": "Identifier",
                                        "src": "2500:14:24"
                                      }
                                    ],
                                    "id": 4996,
                                    "name": "FunctionCall",
                                    "src": "2460:55:24"
                                  }
                                ],
                                "id": 4997,
                                "name": "Assignment",
                                "src": "2444:71:24"
                              }
                            ],
                            "id": 4998,
                            "name": "ExpressionStatement",
                            "src": "2444:71:24"
                          }
                        ],
                        "id": 4999,
                        "name": "Block",
                        "src": "2430:96:24"
                      }
                    ],
                    "id": 5000,
                    "name": "IfStatement",
                    "src": "2251:275:24"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5002
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokensOwed0",
                          "scope": 5078,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint128",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint128",
                              "type": "uint128"
                            },
                            "id": 5001,
                            "name": "ElementaryTypeName",
                            "src": "2574:7:24"
                          }
                        ],
                        "id": 5002,
                        "name": "VariableDeclaration",
                        "src": "2574:19:24"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint128",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint128)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint128"
                                },
                                "id": 5003,
                                "name": "ElementaryTypeName",
                                "src": "2608:7:24"
                              }
                            ],
                            "id": 5004,
                            "name": "ElementaryTypeNameExpression",
                            "src": "2608:7:24"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mulDiv",
                                  "referencedDeclaration": 3946,
                                  "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3990,
                                      "type": "type(library FullMath)",
                                      "value": "FullMath"
                                    },
                                    "id": 5005,
                                    "name": "Identifier",
                                    "src": "2633:8:24"
                                  }
                                ],
                                "id": 5006,
                                "name": "MemberAccess",
                                "src": "2633:15:24"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4961,
                                      "type": "uint256",
                                      "value": "feeGrowthInside0X128"
                                    },
                                    "id": 5007,
                                    "name": "Identifier",
                                    "src": "2670:20:24"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "feeGrowthInside0LastX128",
                                      "referencedDeclaration": 4917,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4967,
                                          "type": "struct Position.Info memory",
                                          "value": "_self"
                                        },
                                        "id": 5008,
                                        "name": "Identifier",
                                        "src": "2693:5:24"
                                      }
                                    ],
                                    "id": 5009,
                                    "name": "MemberAccess",
                                    "src": "2693:30:24"
                                  }
                                ],
                                "id": 5010,
                                "name": "BinaryOperation",
                                "src": "2670:53:24"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "liquidity",
                                  "referencedDeclaration": 4915,
                                  "type": "uint128"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4967,
                                      "type": "struct Position.Info memory",
                                      "value": "_self"
                                    },
                                    "id": 5011,
                                    "name": "Identifier",
                                    "src": "2745:5:24"
                                  }
                                ],
                                "id": 5012,
                                "name": "MemberAccess",
                                "src": "2745:15:24"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "Q128",
                                  "referencedDeclaration": 3806,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3807,
                                      "type": "type(library FixedPoint128)",
                                      "value": "FixedPoint128"
                                    },
                                    "id": 5013,
                                    "name": "Identifier",
                                    "src": "2782:13:24"
                                  }
                                ],
                                "id": 5014,
                                "name": "MemberAccess",
                                "src": "2782:18:24"
                              }
                            ],
                            "id": 5015,
                            "name": "FunctionCall",
                            "src": "2633:185:24"
                          }
                        ],
                        "id": 5016,
                        "name": "FunctionCall",
                        "src": "2608:224:24"
                      }
                    ],
                    "id": 5017,
                    "name": "VariableDeclarationStatement",
                    "src": "2574:258:24"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5019
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokensOwed1",
                          "scope": 5078,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint128",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint128",
                              "type": "uint128"
                            },
                            "id": 5018,
                            "name": "ElementaryTypeName",
                            "src": "2842:7:24"
                          }
                        ],
                        "id": 5019,
                        "name": "VariableDeclaration",
                        "src": "2842:19:24"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint128",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint128)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint128"
                                },
                                "id": 5020,
                                "name": "ElementaryTypeName",
                                "src": "2876:7:24"
                              }
                            ],
                            "id": 5021,
                            "name": "ElementaryTypeNameExpression",
                            "src": "2876:7:24"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mulDiv",
                                  "referencedDeclaration": 3946,
                                  "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3990,
                                      "type": "type(library FullMath)",
                                      "value": "FullMath"
                                    },
                                    "id": 5022,
                                    "name": "Identifier",
                                    "src": "2901:8:24"
                                  }
                                ],
                                "id": 5023,
                                "name": "MemberAccess",
                                "src": "2901:15:24"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4963,
                                      "type": "uint256",
                                      "value": "feeGrowthInside1X128"
                                    },
                                    "id": 5024,
                                    "name": "Identifier",
                                    "src": "2938:20:24"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "feeGrowthInside1LastX128",
                                      "referencedDeclaration": 4919,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4967,
                                          "type": "struct Position.Info memory",
                                          "value": "_self"
                                        },
                                        "id": 5025,
                                        "name": "Identifier",
                                        "src": "2961:5:24"
                                      }
                                    ],
                                    "id": 5026,
                                    "name": "MemberAccess",
                                    "src": "2961:30:24"
                                  }
                                ],
                                "id": 5027,
                                "name": "BinaryOperation",
                                "src": "2938:53:24"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "liquidity",
                                  "referencedDeclaration": 4915,
                                  "type": "uint128"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4967,
                                      "type": "struct Position.Info memory",
                                      "value": "_self"
                                    },
                                    "id": 5028,
                                    "name": "Identifier",
                                    "src": "3013:5:24"
                                  }
                                ],
                                "id": 5029,
                                "name": "MemberAccess",
                                "src": "3013:15:24"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "Q128",
                                  "referencedDeclaration": 3806,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3807,
                                      "type": "type(library FixedPoint128)",
                                      "value": "FixedPoint128"
                                    },
                                    "id": 5030,
                                    "name": "Identifier",
                                    "src": "3050:13:24"
                                  }
                                ],
                                "id": 5031,
                                "name": "MemberAccess",
                                "src": "3050:18:24"
                              }
                            ],
                            "id": 5032,
                            "name": "FunctionCall",
                            "src": "2901:185:24"
                          }
                        ],
                        "id": 5033,
                        "name": "FunctionCall",
                        "src": "2876:224:24"
                      }
                    ],
                    "id": 5034,
                    "name": "VariableDeclarationStatement",
                    "src": "2842:258:24"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4959,
                              "type": "int128",
                              "value": "liquidityDelta"
                            },
                            "id": 5035,
                            "name": "Identifier",
                            "src": "3146:14:24"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 5036,
                            "name": "Literal",
                            "src": "3164:1:24"
                          }
                        ],
                        "id": 5037,
                        "name": "BinaryOperation",
                        "src": "3146:19:24"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint128"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "member_name": "liquidity",
                                  "referencedDeclaration": 4915,
                                  "type": "uint128"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4957,
                                      "type": "struct Position.Info storage pointer",
                                      "value": "self"
                                    },
                                    "id": 5038,
                                    "name": "Identifier",
                                    "src": "3167:4:24"
                                  }
                                ],
                                "id": 5040,
                                "name": "MemberAccess",
                                "src": "3167:14:24"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4971,
                                  "type": "uint128",
                                  "value": "liquidityNext"
                                },
                                "id": 5041,
                                "name": "Identifier",
                                "src": "3184:13:24"
                              }
                            ],
                            "id": 5042,
                            "name": "Assignment",
                            "src": "3167:30:24"
                          }
                        ],
                        "id": 5043,
                        "name": "ExpressionStatement",
                        "src": "3167:30:24"
                      }
                    ],
                    "id": 5044,
                    "name": "IfStatement",
                    "src": "3142:55:24"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "feeGrowthInside0LastX128",
                              "referencedDeclaration": 4917,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4957,
                                  "type": "struct Position.Info storage pointer",
                                  "value": "self"
                                },
                                "id": 5045,
                                "name": "Identifier",
                                "src": "3207:4:24"
                              }
                            ],
                            "id": 5047,
                            "name": "MemberAccess",
                            "src": "3207:29:24"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4961,
                              "type": "uint256",
                              "value": "feeGrowthInside0X128"
                            },
                            "id": 5048,
                            "name": "Identifier",
                            "src": "3239:20:24"
                          }
                        ],
                        "id": 5049,
                        "name": "Assignment",
                        "src": "3207:52:24"
                      }
                    ],
                    "id": 5050,
                    "name": "ExpressionStatement",
                    "src": "3207:52:24"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "feeGrowthInside1LastX128",
                              "referencedDeclaration": 4919,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4957,
                                  "type": "struct Position.Info storage pointer",
                                  "value": "self"
                                },
                                "id": 5051,
                                "name": "Identifier",
                                "src": "3269:4:24"
                              }
                            ],
                            "id": 5053,
                            "name": "MemberAccess",
                            "src": "3269:29:24"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4963,
                              "type": "uint256",
                              "value": "feeGrowthInside1X128"
                            },
                            "id": 5054,
                            "name": "Identifier",
                            "src": "3301:20:24"
                          }
                        ],
                        "id": 5055,
                        "name": "Assignment",
                        "src": "3269:52:24"
                      }
                    ],
                    "id": 5056,
                    "name": "ExpressionStatement",
                    "src": "3269:52:24"
                  },
                  {
                    "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_uint128",
                                "typeString": "uint128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5002,
                                  "type": "uint128",
                                  "value": "tokensOwed0"
                                },
                                "id": 5057,
                                "name": "Identifier",
                                "src": "3335:11:24"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5058,
                                "name": "Literal",
                                "src": "3349:1:24"
                              }
                            ],
                            "id": 5059,
                            "name": "BinaryOperation",
                            "src": "3335:15:24"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5019,
                                  "type": "uint128",
                                  "value": "tokensOwed1"
                                },
                                "id": 5060,
                                "name": "Identifier",
                                "src": "3354:11:24"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5061,
                                "name": "Literal",
                                "src": "3368:1:24"
                              }
                            ],
                            "id": 5062,
                            "name": "BinaryOperation",
                            "src": "3354:15:24"
                          }
                        ],
                        "id": 5063,
                        "name": "BinaryOperation",
                        "src": "3335:34:24"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint128"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "tokensOwed0",
                                      "referencedDeclaration": 4921,
                                      "type": "uint128"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4957,
                                          "type": "struct Position.Info storage pointer",
                                          "value": "self"
                                        },
                                        "id": 5064,
                                        "name": "Identifier",
                                        "src": "3479:4:24"
                                      }
                                    ],
                                    "id": 5066,
                                    "name": "MemberAccess",
                                    "src": "3479:16:24"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5002,
                                      "type": "uint128",
                                      "value": "tokensOwed0"
                                    },
                                    "id": 5067,
                                    "name": "Identifier",
                                    "src": "3499:11:24"
                                  }
                                ],
                                "id": 5068,
                                "name": "Assignment",
                                "src": "3479:31:24"
                              }
                            ],
                            "id": 5069,
                            "name": "ExpressionStatement",
                            "src": "3479:31:24"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint128"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "tokensOwed1",
                                      "referencedDeclaration": 4923,
                                      "type": "uint128"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4957,
                                          "type": "struct Position.Info storage pointer",
                                          "value": "self"
                                        },
                                        "id": 5070,
                                        "name": "Identifier",
                                        "src": "3524:4:24"
                                      }
                                    ],
                                    "id": 5072,
                                    "name": "MemberAccess",
                                    "src": "3524:16:24"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5019,
                                      "type": "uint128",
                                      "value": "tokensOwed1"
                                    },
                                    "id": 5073,
                                    "name": "Identifier",
                                    "src": "3544:11:24"
                                  }
                                ],
                                "id": 5074,
                                "name": "Assignment",
                                "src": "3524:31:24"
                              }
                            ],
                            "id": 5075,
                            "name": "ExpressionStatement",
                            "src": "3524:31:24"
                          }
                        ],
                        "id": 5076,
                        "name": "Block",
                        "src": "3371:195:24"
                      }
                    ],
                    "id": 5077,
                    "name": "IfStatement",
                    "src": "3331:235:24"
                  }
                ],
                "id": 5078,
                "name": "Block",
                "src": "2175:1397:24"
              }
            ],
            "id": 5079,
            "name": "FunctionDefinition",
            "src": "2010:1562:24"
          }
        ],
        "id": 5080,
        "name": "ContractDefinition",
        "src": "350:3224:24"
      }
    ],
    "id": 5081,
    "name": "SourceUnit",
    "src": "37:3538:24"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2022-01-17T20:05:41.774Z",
  "devdoc": {
    "details": "Positions store additional state for tracking fees owed to the position",
    "kind": "dev",
    "methods": {},
    "title": "Position",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "Positions represent an owner address' liquidity between a lower and upper tick boundary",
    "version": 1
  }
}