{
  "language": "Solidity",
  "sources": {
    "@openzeppelin/contracts/token/ERC20/IERC20.sol": {
      "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\n}\n"
    },
    "contracts/helpers/TroveState.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.19;\n\nimport \"../interfaces/IBorrowerOperations.sol\";\nimport \"../interfaces/ITroveManager.sol\";\nimport \"../interfaces/ISortedTroves.sol\";\nimport \"../interfaces/IStabilityPool.sol\";\n\ncontract TroveState {\n\tIBorrowerOperations public bo;\n\tITroveManager public tm;\n\tIStabilityPool public sp;\n\n\tstruct State {\n\t\tuint256 coll;\n\t\tuint256 debt;\n\t\tuint256 interest;\n\t\tuint256 MCR;\n\t\tuint256 ICR;\n\t\tuint256 CCR;\n\t\tuint256 TCR;\n\t\tuint256 price;\n\t\tuint256 maxCap;\n\t\tuint256 entireSystemDebt;\n\t\tuint256 entireSystemColl;\n\t\tuint256 redemptionBootstrap;\n\t\tuint256 redemptionRateWithDecay;\n\t\tuint256 borrowingRateWithDecay;\n\t\tuint256 troveStatus;\n\t\tuint256 spStaked;\n\t\tuint256 spWETHGains;\n\t\tuint256 spEsPropelGains;\n\t}\n\n\tconstructor(IBorrowerOperations _bo, ITroveManager _tm, IStabilityPool _sp) {\n\t\tbo = _bo;\n\t\ttm = _tm;\n\t\tsp = _sp;\n\t}\n\n\tfunction getState(address _borrower) public returns (State memory state) {\n\t\t(state.coll, state.debt) = tm.getTroveCollAndDebt(_borrower);\n\t\tstate.interest = tm.getTroveInterest(_borrower, state.debt);\n\t\tstate.maxCap = tm.maxSystemDebt();\n\t\tstate.MCR = tm.MCR();\n\t\tstate.CCR = tm.CCR();\n\t\tstate.TCR = bo.getTCR();\n\t\tstate.price = tm.fetchPrice();\n\t\tstate.ICR = tm.getCurrentICR(_borrower,state.price);\n\t\tstate.entireSystemDebt = tm.getEntireSystemDebt();\n\t\tstate.entireSystemColl = tm.getEntireSystemColl();\n\t\tstate.redemptionBootstrap = tm.systemDeploymentTime() + tm.BOOTSTRAP_PERIOD();\n\t\tstate.redemptionRateWithDecay = tm.getRedemptionRateWithDecay();\n\t\tstate.borrowingRateWithDecay = tm.getBorrowingRateWithDecay();\n\t\tstate.troveStatus = tm.getTroveStatus(_borrower);\n\t\tstate.spStaked = sp.getTotalPropelUSDDeposits();\n\t\tuint256[] memory collGains = sp.getDepositorCollateralGain(_borrower);\n\t\tif (collGains.length > 0) {\n\t\t\tstate.spWETHGains = collGains[0];\n\t\t}\n\t\tstate.spEsPropelGains = sp.claimableReward(_borrower);\n\t}\n}\n"
    },
    "contracts/interfaces/IBorrowerOperations.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"./ITroveManager.sol\";\n\ninterface IBorrowerOperations {\n\tstruct SystemBalances {\n\t\tuint256[] collaterals;\n\t\tuint256[] debts;\n\t\tuint256[] prices;\n\t}\n\n\tenum BorrowerOperation {\n\t\topenTrove,\n\t\tcloseTrove,\n\t\tadjustTrove\n\t}\n\n\tevent BorrowingFeePaid(address indexed borrower, uint256 amount);\n\tevent CollateralConfigured(ITroveManager troveManager, IERC20 collateralToken);\n\tevent TroveCreated(address indexed _borrower, uint256 arrayIndex);\n\tevent TroveManagerRemoved(ITroveManager troveManager);\n\tevent TroveUpdated(address indexed _borrower, uint256 _debt, uint256 _coll, uint256 stake, BorrowerOperation operation);\n\n\tfunction addColl(ITroveManager troveManager, address account, uint256 _collateralAmount, address _upperHint, address _lowerHint) external;\n\n\tfunction adjustTrove(ITroveManager troveManager, address account, uint256 _maxFeePercentage, uint256 _collDeposit, uint256 _collWithdrawal, uint256 _debtChange, bool _isDebtIncrease, address _upperHint, address _lowerHint) external;\n\n\tfunction closeTrove(ITroveManager troveManager, address account) external;\n\n\tfunction configureCollateral(ITroveManager troveManager, IERC20 collateralToken) external;\n\n\tfunction fetchBalances() external returns (SystemBalances memory balances);\n\n\tfunction getGlobalSystemBalances() external returns (uint256 totalPricedCollateral, uint256 totalDebt);\n\n\tfunction getTCR() external returns (uint256 globalTotalCollateralRatio);\n\n\tfunction openTrove(ITroveManager troveManager, address account, uint256 _maxFeePercentage, uint256 _collateralAmount, uint256 _debtAmount, address _upperHint, address _lowerHint) external;\n\n\tfunction removeTroveManager(ITroveManager troveManager) external;\n\n\tfunction repayDebt(ITroveManager troveManager, address account, uint256 _debtAmount, address _upperHint, address _lowerHint) external;\n\n\tfunction setMinNetDebt(uint256 _minNetDebt) external;\n\n\tfunction withdrawColl(ITroveManager troveManager, address account, uint256 _collWithdrawal, address _upperHint, address _lowerHint) external;\n\n\tfunction withdrawDebt(ITroveManager troveManager, address account, uint256 _maxFeePercentage, uint256 _debtAmount, address _upperHint, address _lowerHint) external;\n\n\tfunction factory() external view returns (address);\n\n\tfunction getCompositeDebt(uint256 _debt) external view returns (uint256);\n\n\tfunction minNetDebt() external view returns (uint256);\n\n\tfunction checkRecoveryMode(uint256 TCR) external pure returns (bool);\n}\n"
    },
    "contracts/interfaces/IPriceFeed.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.19;\n\nimport \"../interfaces/IPyth.sol\";\n\ninterface IPriceFeed {\n\tstruct OracleRecord {\n\t\tIPyth pyth;\n\t\tuint32 decimals;\n\t\tuint32 heartbeat;\n\t\tbool isFeedWorking;\n\t}\n\n\tstruct PriceRecord {\n\t\tuint96 scaledPrice;\n\t\tuint32 timestamp;\n\t\tuint32 lastUpdated;\n\t}\n\n\tstruct FeedResponse {\n\t\tint64 price;\n\t\t// Confidence interval around the price\n\t\tuint64 conf;\n\t\t// Price exponent\n\t\tint32 expo;\n\t\t// Unix timestamp describing when the price was published\n\t\tuint publishTime;\n\t\tbool success;\n\t}\n\n\t// Custom Errors --------------------------------------------------------------------------------------------------\n\n\terror PriceFeed__InvalidFeedResponseError();\n\terror PriceFeed__FeedFrozenError();\n\terror PriceFeed__UnknownFeedError();\n\terror PriceFeed__HeartbeatOutOfBoundsError();\n\n\t// Events ---------------------------------------------------------------------------------------------------------\n\n\tevent NewOracleRegistered(address pyth);\n\tevent PriceFeedStatusUpdated(address oracle, bool isWorking);\n\tevent PriceRecordUpdated(uint256 _price);\n\n\tfunction fetchPrice(address _token) external returns (uint256);\n}\n"
    },
    "contracts/interfaces/IPropelBase.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.19;\n\ninterface IPropelBase {\n\tfunction DECIMAL_PRECISION() external view returns (uint256);\n\n\t// Critical system collateral ratio. If the system's total collateral ratio (TCR) falls below the CCR, Recovery Mode is triggered.\n\tfunction CCR() external view returns (uint256); // 150%\n\n\t// Amount of debt to be locked in gas pool on opening troves\n\tfunction DEBT_GAS_COMPENSATION() external view returns (uint256);\n\n\tfunction PERCENT_DIVISOR() external view returns (uint256);\n}\n"
    },
    "contracts/interfaces/IPyth.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.19;\n\ninterface IPyth {\n\tstruct Price {\n\t\t// Price\n\t\tint64 price;\n\t\t// Confidence interval around the price\n\t\tuint64 conf;\n\t\t// Price exponent\n\t\tint32 expo;\n\t\t// Unix timestamp describing when the price was published\n\t\tuint publishTime;\n\t}\n\n\tfunction getPrice(bytes32 id) external view returns (Price memory);\n\n\tfunction getPriceUnsafe(bytes32 id) external view returns (Price memory price);\n}\n"
    },
    "contracts/interfaces/ISortedTroves.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.19;\n\ninterface ISortedTroves {\n\tevent NodeAdded(address _id, uint256 _NICR);\n\tevent NodeRemoved(address _id);\n\n\tfunction insert(address _id, uint256 _NICR, address _prevId, address _nextId) external;\n\n\tfunction reInsert(address _id, uint256 _newNICR, address _prevId, address _nextId) external;\n\n\tfunction remove(address _id) external;\n\n\tfunction setAddresses(address _troveManagerAddress) external;\n\n\tfunction contains(address _id) external view returns (bool);\n\n\tfunction data() external view returns (address head, address tail, uint256 size);\n\n\tfunction findInsertPosition(uint256 _NICR, address _prevId, address _nextId) external view returns (address, address);\n\n\tfunction getFirst() external view returns (address);\n\n\tfunction getLast() external view returns (address);\n\n\tfunction getNext(address _id) external view returns (address);\n\n\tfunction getPrev(address _id) external view returns (address);\n\n\tfunction getSize() external view returns (uint256);\n\n\tfunction isEmpty() external view returns (bool);\n\n\tfunction troveManager() external view returns (address);\n\n\tfunction validInsertPosition(uint256 _NICR, address _prevId, address _nextId) external view returns (bool);\n}\n"
    },
    "contracts/interfaces/IStabilityPool.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.19;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\ninterface IStabilityPool {\n\tevent CollateralGainWithdrawn(address indexed _depositor, uint256[] _collateral);\n\tevent CollateralOverwritten(address oldCollateral, address newCollateral);\n\tevent DepositSnapshotUpdated(address indexed _depositor, uint256 _P, uint256 _G);\n\tevent EpochUpdated(uint128 _currentEpoch);\n\tevent G_Updated(uint256 _G, uint128 _epoch, uint128 _scale);\n\tevent P_Updated(uint256 _P);\n\tevent RewardClaimed(address indexed account, address indexed recipient, uint256 claimed);\n\tevent S_Updated(uint256 idx, uint256 _S, uint128 _epoch, uint128 _scale);\n\tevent ScaleUpdated(uint128 _currentScale);\n\tevent StabilityPoolPropelUSDBalanceUpdated(uint256 _newBalance);\n\tevent UserDepositChanged(address indexed _depositor, uint256 _newDeposit);\n\n\t// function claimCollateralGains(address recipient, uint256[] calldata collateralIndexes) external;\n\n\t// function claimReward(address recipient) external returns (uint256 amount);\n\n\tfunction enableCollateral(IERC20 _collateral) external;\n\n\tfunction offset(IERC20 collateral, uint256 _debtToOffset, uint256 _collToAdd) external;\n\n\tfunction provideToSP(uint256 _amount) external;\n\n\tfunction startCollateralSunset(IERC20 collateral) external;\n\n\tfunction withdrawFromSP(uint256 _amount) external;\n\n\tfunction DECIMAL_PRECISION() external view returns (uint256);\n\n\tfunction P() external view returns (uint256);\n\n\tfunction SCALE_FACTOR() external view returns (uint256);\n\n\tfunction SUNSET_DURATION() external view returns (uint128);\n\n\tfunction claimableReward(address _depositor) external view returns (uint256);\n\n\tfunction currentEpoch() external view returns (uint128);\n\n\tfunction currentScale() external view returns (uint128);\n\n\tfunction depositSnapshots(address) external view returns (uint256 P, uint256 G, uint128 scale, uint128 epoch);\n\n\tfunction depositSums(address, uint256) external view returns (uint256);\n\n\tfunction epochToScaleToG(uint128, uint128) external view returns (uint256);\n\n\tfunction epochToScaleToSums(uint128, uint128, uint256) external view returns (uint256);\n\n\tfunction factory() external view returns (address);\n\n\tfunction getCompoundedDeposit(address _depositor) external view returns (uint256);\n\n\tfunction getDepositorCollateralGain(address _depositor) external view returns (uint256[] memory collateralGains);\n\n\tfunction getTotalPropelUSDDeposits() external view returns (uint256);\n\n\tfunction lastDebtLossError_Offset() external view returns (uint256);\n\n\tfunction lastEsPropelError() external view returns (uint256);\n\n\tfunction liquidationManager() external view returns (address);\n}\n"
    },
    "contracts/interfaces/ITroveManager.sol": {
      "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.8.19;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"./IPropelBase.sol\";\nimport \"./ISortedTroves.sol\";\nimport \"./IPriceFeed.sol\";\n\ninterface ITroveManager is IPropelBase {\n\t// Store the necessary data for a trove\n\tstruct Trove {\n\t\tuint256 debt;\n\t\tuint256 coll;\n\t\tuint256 stake;\n\t\tStatus status;\n\t\tuint128 arrayIndex;\n\t}\n\n\tstruct RedemptionTotals {\n\t\tuint256 remainingDebt;\n\t\tuint256 totalDebtToRedeem;\n\t\tuint256 totalCollateralDrawn;\n\t\tuint256 totalInterest;\n\t\tuint256 collateralFee;\n\t\tuint256 collateralToSendToRedeemer;\n\t\tuint256 decayedBaseRate;\n\t\tuint256 price;\n\t\tuint256 totalDebtSupplyAtStart;\n\t}\n\n\tstruct SingleRedemptionValues {\n\t\tuint256 debtLot;\n\t\tuint256 collateralLot;\n\t\tuint256 interestLot;\n\t\tbool cancelledPartial;\n\t}\n\n\t// Object containing the collateral and debt snapshots for a given active trove\n\tstruct RewardSnapshot {\n\t\tuint256 collateral;\n\t\tuint256 debt;\n\t\tuint256 interest;\n\t}\n\n\tenum TroveManagerOperation {\n\t\tapplyPendingRewards,\n\t\tliquidateInNormalMode,\n\t\tliquidateInRecoveryMode,\n\t\tredeemCollateral\n\t}\n\n\tenum Status {\n\t\tnonExistent,\n\t\tactive,\n\t\tclosedByOwner,\n\t\tclosedByLiquidation,\n\t\tclosedByRedemption\n\t}\n\n\tevent InsterstPaid(address _account, address _borrower, uint256 _interest);\n\tevent TroveUpdated(address indexed _borrower, uint256 _debt, uint256 _coll, uint256 _stake, TroveManagerOperation _operation);\n\tevent Redemption(uint256 _attemptedDebtAmount, uint256 _actualDebtAmount, uint256 _collateralSent, uint256 _InterestDebt, uint256 _collateralFee);\n\tevent BaseRateUpdated(uint256 _baseRate);\n\tevent LastFeeOpTimeUpdated(uint256 _lastFeeOpTime);\n\tevent TotalStakesUpdated(uint256 _newTotalStakes);\n\tevent SystemSnapshotsUpdated(uint256 _totalStakesSnapshot, uint256 _totalCollateralSnapshot);\n\tevent LTermsUpdated(uint256 _L_collateral, uint256 _L_debt);\n\tevent TroveSnapshotsUpdated(uint256 _L_collateral, uint256 _L_debt, uint256 _L_Interest_Debt);\n\tevent TroveIndexUpdated(address _borrower, uint256 _newIndex);\n\tevent CollateralSent(address _to, uint256 _amount);\n\tevent RewardClaimed(address indexed account, address indexed recipient, uint256 claimed);\n\n\tfunction addCollateralSurplus(address borrower, uint256 collSurplus) external;\n\n\tfunction applyPendingRewards(address _borrower) external returns (uint256 coll, uint256 debt);\n\n\tfunction claimCollateral(address _receiver) external;\n\n\tfunction closeTrove(address _borrower, address _receiver, uint256 collAmount, uint256 debtAmount) external;\n\n\tfunction closeTroveByLiquidation(address _borrower) external;\n\n\tfunction decayBaseRateAndGetBorrowingFee(uint256 _debt) external returns (uint256);\n\n\tfunction decreaseDebtAndSendCollateral(address account, uint256 debt, uint256 coll) external;\n\n\tfunction finalizeLiquidation(address _liquidator, uint256 _debt, uint256 _coll, uint256 _collSurplus, uint256 _debtGasComp, uint256 _collGasComp, uint256 _interest) external;\n\n\tfunction getEntireSystemBalances() external returns (uint256, uint256, uint256);\n\n\tfunction movePendingTroveRewardsToActiveBalances(uint256 _debt, uint256 _collateral) external;\n\n\tfunction openTrove(address _borrower, uint256 _collateralAmount, uint256 _compositeDebt, uint256 NICR, address _upperHint, address _lowerHint) external returns (uint256 stake, uint256 arrayIndex);\n\n\tfunction redeemCollateral(uint256 _debtAmount, address _firstRedemptionHint, address _upperPartialRedemptionHint, address _lowerPartialRedemptionHint, uint256 _partialRedemptionHintNICR, uint256 _maxIterations, uint256 _maxFeePercentage) external;\n\n\tfunction setAddresses(address _priceFeedAddress, address _sortedTrovesAddress, IERC20 _collateralToken) external;\n\n\tfunction setParameters(uint256 _minuteDecayFactor, uint256 _redemptionFeeFloor, uint256 _maxRedemptionFee, uint256 _borrowingFeeFloor, uint256 _maxBorrowingFee, uint256 _maxSystemDebt, uint256 _MCR, uint32 _interestRate) external;\n\n\tfunction setPaused(bool _paused) external;\n\n\tfunction setPriceFeed(address _priceFeedAddress) external;\n\n\tfunction updateTroveFromAdjustment(bool _isDebtIncrease, uint256 _debtChange, uint256 _netDebtChange, bool _isCollIncrease, uint256 _collChange, address _upperHint, address _lowerHint, address _borrower, address _receiver) external returns (uint256, uint256, uint256);\n\n\tfunction fetchPrice() external returns (uint256);\n\n\tfunction distributeInterestDebt() external returns (uint256);\n\n\tfunction repayInterest(address _account, address _borrower, uint256 _debt) external;\n\n\tfunction BOOTSTRAP_PERIOD() external view returns (uint256);\n\n\tfunction L_collateral() external view returns (uint256);\n\n\tfunction L_debt() external view returns (uint256);\n\n\tfunction MCR() external view returns (uint256);\n\n\tfunction getTrove(address _borrower) external view returns (Trove memory);\n\n\tfunction baseRate() external view returns (uint256);\n\n\tfunction borrowerOperationsAddress() external view returns (address);\n\n\tfunction borrowingFeeFloor() external view returns (uint256);\n\n\tfunction collateralToken() external view returns (IERC20);\n\n\tfunction defaultedCollateral() external view returns (uint256);\n\n\tfunction defaultedDebt() external view returns (uint256);\n\n\tfunction getBorrowingFee(uint256 _debt) external view returns (uint256);\n\n\tfunction getBorrowingFeeWithDecay(uint256 _debt) external view returns (uint256);\n\n\tfunction getBorrowingRate() external view returns (uint256);\n\n\tfunction getBorrowingRateWithDecay() external view returns (uint256);\n\n\tfunction getCurrentICR(address _borrower, uint256 _price) external view returns (uint256);\n\n\tfunction getEntireDebtAndColl(address _borrower) external view returns (uint256 debt, uint256 coll, uint256 pendingDebtReward, uint256 pendingCollateralReward);\n\n\tfunction getEntireSystemColl() external view returns (uint256);\n\n\tfunction getEntireSystemDebt() external view returns (uint256);\n\n\tfunction getGlobalSystemDebt() external view returns (uint256);\n\n\tfunction getTroveInterest(address _borrower, uint256 _debt) external view returns (uint256);\n\n\tfunction getRedemptionICR(address _borrower, uint256 _price) external view returns (uint256);\n\n\tfunction getNominalICR(address _borrower) external view returns (uint256);\n\n\tfunction getPendingCollAndDebtRewards(address _borrower) external view returns (uint256, uint256);\n\n\tfunction getRedemptionFeeWithDecay(uint256 _collateralDrawn) external view returns (uint256);\n\n\tfunction getRedemptionRate() external view returns (uint256);\n\n\tfunction getRedemptionRateWithDecay() external view returns (uint256);\n\n\tfunction getTotalActiveCollateral() external view returns (uint256);\n\n\tfunction getTotalActiveDebt() external view returns (uint256);\n\n\tfunction getTroveCollAndDebt(address _borrower) external view returns (uint256 coll, uint256 debt);\n\n\tfunction getTroveFromTroveOwnersArray(uint256 _index) external view returns (address);\n\n\tfunction getTroveOwnersCount() external view returns (uint256);\n\n\tfunction getTroveStake(address _borrower) external view returns (uint256);\n\n\tfunction getTroveStatus(address _borrower) external view returns (uint256);\n\n\tfunction hasPendingRewards(address _borrower) external view returns (bool);\n\n\tfunction lastCollateralError_Redistribution() external view returns (uint256);\n\n\tfunction lastDebtError_Redistribution() external view returns (uint256);\n\n\tfunction lastFeeOperationTime() external view returns (uint256);\n\n\tfunction liquidationManager() external view returns (address);\n\n\tfunction maxBorrowingFee() external view returns (uint256);\n\n\tfunction maxRedemptionFee() external view returns (uint256);\n\n\tfunction maxSystemDebt() external view returns (uint256);\n\n\tfunction minuteDecayFactor() external view returns (uint256);\n\n\tfunction paused() external view returns (bool);\n\n\tfunction redemptionFeeFloor() external view returns (uint256);\n\n\tfunction getRewardSnapshots(address) external view returns (RewardSnapshot memory);\n\n\tfunction priceFeed() external view returns (IPriceFeed);\n\n\tfunction sortedTroves() external view returns (ISortedTroves);\n\n\tfunction sunsetting() external view returns (bool);\n\n\tfunction surplusBalances(address) external view returns (uint256);\n\n\tfunction systemDeploymentTime() external view returns (uint256);\n\n\tfunction totalCollateralSnapshot() external view returns (uint256);\n\n\tfunction totalStakes() external view returns (uint256);\n\n\tfunction totalStakesSnapshot() external view returns (uint256);\n}\n"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": true,
      "runs": 2000
    },
    "outputSelection": {
      "*": {
        "*": [
          "storageLayout",
          "abi",
          "evm.bytecode",
          "evm.deployedBytecode",
          "evm.methodIdentifiers",
          "metadata",
          "devdoc",
          "userdoc",
          "evm.gasEstimates",
          "storageLayout"
        ],
        "": [
          "ast"
        ]
      }
    },
    "metadata": {
      "useLiteralContent": true
    }
  }
}