[
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "spotPriceB",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "EthCircuitBreakerHit",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "EthTransferFailed",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minAmountOut",
        "type": "uint256"
      }
    ],
    "name": "InsufficientAmountOut",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NoSwapsInBufferZone",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NxmCircuitBreakerHit",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OneInputOnly",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OneInputRequired",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "blockTimestamp",
        "type": "uint256"
      }
    ],
    "name": "SwapExpired",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SwapPaused",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SystemPaused",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "BudgetRemoved",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "EthExtracted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "EthInjected",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "member",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "ethIn",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "nxmOut",
        "type": "uint256"
      }
    ],
    "name": "EthSwappedForNxm",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "member",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "nxmIn",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "ethOut",
        "type": "uint256"
      }
    ],
    "name": "NxmSwappedForEth",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "timestamp",
        "type": "uint32"
      },
      {
        "indexed": false,
        "internalType": "uint112",
        "name": "priceCumulativeAbove",
        "type": "uint112"
      },
      {
        "indexed": false,
        "internalType": "uint112",
        "name": "priceCumulativeBelow",
        "type": "uint112"
      }
    ],
    "name": "ObservationUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bool",
        "name": "paused",
        "type": "bool"
      }
    ],
    "name": "SwapPauseConfigured",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "FAST_LIQUIDITY_SPEED",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FAST_RATCHET_SPEED",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "GRANULARITY",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LIQ_SPEED_A",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LIQ_SPEED_B",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LIQ_SPEED_PERIOD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "NORMAL_RATCHET_SPEED",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PERIOD_SIZE",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PRICE_BUFFER",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PRICE_BUFFER_DENOMINATOR",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "RATCHET_DENOMINATOR",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "RATCHET_PERIOD",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TARGET_LIQUIDITY",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "nxmA",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nxmB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eth",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "budget",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "ratchetSpeedB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.State",
        "name": "state",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "timestamp",
            "type": "uint32"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeAbove",
            "type": "uint112"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeBelow",
            "type": "uint112"
          }
        ],
        "internalType": "struct IRamm.Observation[3]",
        "name": "_observations",
        "type": "tuple[3]"
      },
      {
        "internalType": "uint256",
        "name": "capital",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "supply",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "_getInternalPrice",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "nxmA",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nxmB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eth",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "budget",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "ratchetSpeedB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.State",
        "name": "state",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "capital",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "supply",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "mcr",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.Context",
        "name": "context",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "currentTimestamp",
        "type": "uint256"
      }
    ],
    "name": "_getReserves",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "nxmA",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nxmB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eth",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "budget",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "ratchetSpeedB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.State",
        "name": "",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "injected",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "extracted",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "nxmA",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nxmB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eth",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "budget",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "ratchetSpeedB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.State",
        "name": "initialState",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "timestamp",
            "type": "uint32"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeAbove",
            "type": "uint112"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeBelow",
            "type": "uint112"
          }
        ],
        "internalType": "struct IRamm.Observation[3]",
        "name": "_observations",
        "type": "tuple[3]"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "capital",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "supply",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "mcr",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.Context",
        "name": "context",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "currentStateTimestamp",
        "type": "uint256"
      }
    ],
    "name": "_updateTwap",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "timestamp",
            "type": "uint32"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeAbove",
            "type": "uint112"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeBelow",
            "type": "uint112"
          }
        ],
        "internalType": "struct IRamm.Observation[3]",
        "name": "",
        "type": "tuple[3]"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "changeDependentContractAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "masterAddress",
        "type": "address"
      }
    ],
    "name": "changeMasterAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ethLimit",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ethReleased",
    "outputs": [
      {
        "internalType": "uint96",
        "name": "",
        "type": "uint96"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getBookValue",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "bookValue",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "initialPriceA",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "initialPriceB",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "getInitialObservations",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "timestamp",
            "type": "uint32"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeAbove",
            "type": "uint112"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeBelow",
            "type": "uint112"
          }
        ],
        "internalType": "struct IRamm.Observation[3]",
        "name": "initialObservations",
        "type": "tuple[3]"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getInternalPrice",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "internalPrice",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getInternalPriceAndUpdateTwap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "internalPrice",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "nxmA",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nxmB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eth",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "budget",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "ratchetSpeedB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.State",
        "name": "previousState",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "nxmA",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nxmB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eth",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "budget",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "ratchetSpeedB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.State",
        "name": "state",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "timestamp",
            "type": "uint32"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeAbove",
            "type": "uint112"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeBelow",
            "type": "uint112"
          }
        ],
        "internalType": "struct IRamm.Observation",
        "name": "previousObservation",
        "type": "tuple"
      },
      {
        "internalType": "uint256",
        "name": "capital",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "supply",
        "type": "uint256"
      }
    ],
    "name": "getObservation",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "timestamp",
            "type": "uint32"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeAbove",
            "type": "uint112"
          },
          {
            "internalType": "uint112",
            "name": "priceCumulativeBelow",
            "type": "uint112"
          }
        ],
        "internalType": "struct IRamm.Observation",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getReserves",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_ethReserve",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "nxmA",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "nxmB",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_budget",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getSpotPrices",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "spotPriceA",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "spotPriceB",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "internalContracts",
    "outputs": [
      {
        "internalType": "address payable",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "loadState",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "nxmA",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "nxmB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eth",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "budget",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "ratchetSpeedB",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          }
        ],
        "internalType": "struct IRamm.State",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "master",
    "outputs": [
      {
        "internalType": "contract INXMMaster",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "nxmLimit",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "nxmReleased",
    "outputs": [
      {
        "internalType": "uint96",
        "name": "",
        "type": "uint96"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "observations",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "timestamp",
        "type": "uint32"
      },
      {
        "internalType": "uint112",
        "name": "priceCumulativeAbove",
        "type": "uint112"
      },
      {
        "internalType": "uint112",
        "name": "priceCumulativeBelow",
        "type": "uint112"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ratchetSpeedB",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "removeBudget",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_ethLimit",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_nxmLimit",
        "type": "uint256"
      }
    ],
    "name": "setCircuitBreakerLimits",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "_swapPaused",
        "type": "bool"
      }
    ],
    "name": "setEmergencySwapPause",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "slot0",
    "outputs": [
      {
        "internalType": "uint128",
        "name": "nxmReserveA",
        "type": "uint128"
      },
      {
        "internalType": "uint128",
        "name": "nxmReserveB",
        "type": "uint128"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "slot1",
    "outputs": [
      {
        "internalType": "uint128",
        "name": "ethReserve",
        "type": "uint128"
      },
      {
        "internalType": "uint88",
        "name": "budget",
        "type": "uint88"
      },
      {
        "internalType": "uint32",
        "name": "updatedAt",
        "type": "uint32"
      },
      {
        "internalType": "bool",
        "name": "swapPaused",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "nxmIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "minAmountOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      }
    ],
    "name": "swap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "swapPaused",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "updateTwap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]