Interest Rate Strategy

The InterestRateStrategy contract manages loan interest rates with theses being dependent on the utilisation of liquidity within the lending pool reserve

Methods

calculateInterestRate()

function calculateInterestRate(uint256 reserveId, uint256 availableLiquidity, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 averageStableBorrowRate, uint256 reserveFactor)

Calculates the interest rate depending on the reserve's state and configurations.

Parameter NameTypeDescription

reserveId

uint256

id of the targeted reserve

availableLiquidity

uint256

amount of liquidity available in the reserve

totalStableDebt

uint256

total amount of stable debt

totalVariableDebt

uint256

total amount of variable debt

averageStableBorrowRate

uint256

average stable borrow rate

reserveFactor

uint256

reserve factor for the reserve, i.e. percentage of yield going to the protocol

Returns

Parameter NameTypeDescription

liquidityRate

uint256

liquidity rate of the reserve

stableBorrowRate

uint256

stable borrow interest rate

variableBorrowRate

uint256

variable borrow interest rate

calculateInterestRates()

function calculateInterestRate(uint256 reserveId, address asset, address fToken, uint256 liquidityAdded, uint256 liquidityTaken, uint256 totalStableDebt, uint256 totalVariableDebt, uint256 averageStableBorrowRate, uint256 reserveFactor)

Parameter NameTypeDescription

reserveId

uint256

id of the targeted reserve

asset

address

address of the currency

fToken

address

address of the fToken proxy

liquidityAdded

uint256

amount of liquidity added

liquidityTaken

uint256

amount of liquidity taken

totalStableDebt

uint256

total amount of stable debt

totalVariableDebt

uint256

total amount of variable debt

averageStableBorrowRate

uint256

average stable borrow rate

reserveFactor

uint256

reserve factor for the reserve, i.e. percentage of yield going to the protocol

Calculates the interest rate depending on the reserve's state and configurations.

Returns

Parameter NameTypeDescription

liquidityRate

uint256

liquidity rate of the reserve

stableBorrowRate

uint256

stable borrow interest rate

variableBorrowRate

uint256

variable borrow interest rate

View Methods

variableRateSlope1()

function variableRateSlope1()

Returns slope1 of the variable interest rate.

variableRateSlope2()

function variableRateSlope2()

Returns slope2 of the variable interest rate.

stableRateSlope1()

function stableRateSlope1()

Returns slope1 of the stable interest rate.

stableRateSlope2()

function stableRateSlope2()

Returns slope2 of the stable interest rate.

baseVariableBorrowRate()

function baseVariableBorrowRate()

Returns the base variable borrow rate.

maxVariableBorrowRate()

function maxVariableBorrowRate()

Returns the max variable borrow rate.

ABI

Interest Rate Strategy ABI
{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IAddressProvider",
          "name": "addressprovider_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "optimalUtilizationRate_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseVariableBorrowRate_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "variableRateSlope1_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "variableRateSlope2_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stableRateSlope1_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stableRateSlope2_",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "EXCESS_UTILIZATION_RATE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OPTIMAL_UTILIZATION_RATE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "addressProvider",
      "outputs": [
        {
          "internalType": "contract IAddressProvider",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseVariableBorrowRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "availableLiquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalStableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalVariableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "averageStableBorrowRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveFactor",
          "type": "uint256"
        }
      ],
      "name": "calculateInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reserveId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "fToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidityAdded",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidityTaken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalStableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalVariableDebt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "averageStableBorrowRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveFactor",
          "type": "uint256"
        }
      ],
      "name": "calculateInterestRates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxVariableBorrowRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stableRateSlope1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stableRateSlope2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "variableRateSlope1",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "variableRateSlope2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x61018060405234801561001157600080fd5b50604051610dd0380380610dd0833981016040819052610030916100b5565b85608081815250506100608661004e61009060201b6107bc1760201c565b6100a060201b6107cc1790919060201c565b60a0526001600160a01b0390961660c05260e093909352610100919091526101205261014052506101605261013f565b6b033b2e3c9fd0803ce800000090565b60006100ac828461011e565b90505b92915050565b600080600080600080600060e0888a0312156100d057600080fd5b87516001600160a01b03811681146100e757600080fd5b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b818103818111156100af57634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051610bb76102196000396000818161022d015261059101526000818160b0015281816105c101526106ab0152600081816101530152818161025801526105f20152600081816101790152818161029d0152818161063d01526107150152600081816102070152818161027c0152818161061c015261073b01526000818161010f015261040501526000818160e8015261052b0152600081816101e3015281816104ff0152818161054f0152818161067701526106ef0152610bb76000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637b832f58116100715780637b832f58146101775780637d8a872d1461019d5780639b9c5b49146101cb578063a15f30ac146101de578063b258954414610205578063ccab01a31461022b57600080fd5b80630bdf953f146100ae57806317319873146100e35780632954018c1461010a578063643d41f21461014957806365614f8114610151575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100da565b6100d0610251565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b6101b06101ab3660046109be565b6102cc565b604080519384526020840192909252908201526060016100da565b6101b06101d9366004610a36565b61037b565b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b60006102c77f00000000000000000000000000000000000000000000000000000000000000006102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b906107e1565b905090565b6040516370a0823160e01b81526001600160a01b0388811660048301526000918291829182918d16906370a0823190602401602060405180830381865afa15801561031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033f9190610a79565b90506103558961034f838d6107e1565b906107cc565b90506103658d828a8a8a8a61037b565b9350935093505099509950999650505050505050565b60008060006103b26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6103bc88886107e1565b808252600060408301819052602083018190526060830152156103f75780516103f2906103ea908b906107e1565b8251906107ed565b6103fa565b60005b8160800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663617e06056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190610a92565b6001600160a01b031663f12c8b358b6040518263ffffffff1660e01b81526004016104b291815260200190565b602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610a79565b604082015260808101517f0000000000000000000000000000000000000000000000000000000000000000101561066c5760006105877f00000000000000000000000000000000000000000000000000000000000000006105817f000000000000000000000000000000000000000000000000000000000000000085608001516107cc90919063ffffffff16565b906107ed565b90506105e56105b67f00000000000000000000000000000000000000000000000000000000000000008361082f565b60408401516102c1907f00000000000000000000000000000000000000000000000000000000000000006107e1565b60408301526106616106177f00000000000000000000000000000000000000000000000000000000000000008361082f565b6102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b602083015250610766565b6106db6106d06106a97f000000000000000000000000000000000000000000000000000000000000000084608001516107ed90919063ffffffff16565b7f00000000000000000000000000000000000000000000000000000000000000009061082f565b6040830151906107e1565b6040820152608081015161076090610739907f000000000000000000000000000000000000000000000000000000000000000090610581907f000000000000000000000000000000000000000000000000000000000000000061082f565b7f0000000000000000000000000000000000000000000000000000000000000000906107e1565b60208201525b610799610775612710876107cc565b610793836080015161078d8c8c87602001518d610865565b9061082f565b906108cd565b606082018190526040820151602090920151909b919a5098509650505050505050565b6b033b2e3c9fd0803ce800000090565b60006107d88284610acc565b90505b92915050565b60006107d88284610adf565b6000806107fb600284610af2565b90506108278361082161081a876b033b2e3c9fd0803ce800000061097e565b84906107e1565b9061098a565b949350505050565b60006107d86b033b2e3c9fd0803ce800000061082161084e868661097e565b6102c160026b033b2e3c9fd0803ce8000000610af2565b60008061087286866107e1565b905080600003610886576000915050610827565b60006108958561078d88610996565b905060006108a68561078d8a610996565b905060006108c06108b685610996565b61058185856107e1565b9998505050505050505050565b60008215806108da575081155b156108e7575060006107db565b816108f56002612710610af2565b61090190600019610acc565b61090b9190610af2565b8311156040518060400160405280600381526020016203230360ec1b815250906109515760405162461bcd60e51b81526004016109489190610b14565b60405180910390fd5b50612710610960600282610af2565b61096a8486610b62565b6109749190610adf565b6107d89190610af2565b60006107d88284610b62565b60006107d88284610af2565b60006107db82633b9aca0061097e565b6001600160a01b03811681146109bb57600080fd5b50565b60008060008060008060008060006101208a8c0312156109dd57600080fd5b8935985060208a01356109ef816109a6565b975060408a01356109ff816109a6565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e08201359550610100909101359350915050565b60008060008060008060c08789031215610a4f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208284031215610a8b57600080fd5b5051919050565b600060208284031215610aa457600080fd5b8151610aaf816109a6565b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107db576107db610ab6565b808201808211156107db576107db610ab6565b600082610b0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610b4157858101830151858201604001528201610b25565b506000604082860101526040601f19601f8301168501019250505092915050565b6000816000190483118215151615610b7c57610b7c610ab6565b50029056fea2646970667358221220b9696d36d84199f46617ec26b205bc5caf91a18f7fb7c5e906d3a5ed738abe9964736f6c63430008100033",
    "sourceMap": "958:9371:144:-:0;;;2520:751;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2853:23;2826:50;;;;;;2913:45;2934:23;2913:16;:14;;;;;:16;;:::i;:::-;:20;;;;;;:45;;;;:::i;:::-;2887:71;;-1:-1:-1;;;;;2969:34:144;;;;;3014:49;;;;;3074:41;;;;;3126;;3178:37;;-1:-1:-1;3226:37:144;;958:9371;;641:76:134;524:4;;641:76::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;:::-;3199:12;;3122:96;;;;;:::o;14:686:176:-;164:6;172;180;188;196;204;212;265:3;253:9;244:7;240:23;236:33;233:53;;;282:1;279;272:12;233:53;308:16;;-1:-1:-1;;;;;353:31:176;;343:42;;333:70;;399:1;396;389:12;333:70;467:2;452:18;;446:25;511:2;496:18;;490:25;555:2;540:18;;534:25;599:3;584:19;;578:26;644:3;629:19;;623:26;689:3;674:19;;;668:26;422:5;;446:25;;-1:-1:-1;490:25:176;;534;;-1:-1:-1;578:26:176;;-1:-1:-1;623:26:176;-1:-1:-1;668:26:176;;-1:-1:-1;14:686:176;-1:-1:-1;;;14:686:176:o;705:225::-;772:9;;;793:11;;;790:134;;;846:10;841:3;837:20;834:1;827:31;881:4;878:1;871:15;909:4;906:1;899:15;705:225;958:9371:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637b832f58116100715780637b832f58146101775780637d8a872d1461019d5780639b9c5b49146101cb578063a15f30ac146101de578063b258954414610205578063ccab01a31461022b57600080fd5b80630bdf953f146100ae57806317319873146100e35780632954018c1461010a578063643d41f21461014957806365614f8114610151575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040519081526020015b60405180910390f35b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b6101317f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100da565b6100d0610251565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b6101b06101ab3660046109be565b6102cc565b604080519384526020840192909252908201526060016100da565b6101b06101d9366004610a36565b61037b565b6100d07f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b7f00000000000000000000000000000000000000000000000000000000000000006100d0565b60006102c77f00000000000000000000000000000000000000000000000000000000000000006102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b906107e1565b905090565b6040516370a0823160e01b81526001600160a01b0388811660048301526000918291829182918d16906370a0823190602401602060405180830381865afa15801561031b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033f9190610a79565b90506103558961034f838d6107e1565b906107cc565b90506103658d828a8a8a8a61037b565b9350935093505099509950999650505050505050565b60008060006103b26040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6103bc88886107e1565b808252600060408301819052602083018190526060830152156103f75780516103f2906103ea908b906107e1565b8251906107ed565b6103fa565b60005b8160800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663617e06056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104859190610a92565b6001600160a01b031663f12c8b358b6040518263ffffffff1660e01b81526004016104b291815260200190565b602060405180830381865afa1580156104cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f39190610a79565b604082015260808101517f0000000000000000000000000000000000000000000000000000000000000000101561066c5760006105877f00000000000000000000000000000000000000000000000000000000000000006105817f000000000000000000000000000000000000000000000000000000000000000085608001516107cc90919063ffffffff16565b906107ed565b90506105e56105b67f00000000000000000000000000000000000000000000000000000000000000008361082f565b60408401516102c1907f00000000000000000000000000000000000000000000000000000000000000006107e1565b60408301526106616106177f00000000000000000000000000000000000000000000000000000000000000008361082f565b6102c17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006107e1565b602083015250610766565b6106db6106d06106a97f000000000000000000000000000000000000000000000000000000000000000084608001516107ed90919063ffffffff16565b7f00000000000000000000000000000000000000000000000000000000000000009061082f565b6040830151906107e1565b6040820152608081015161076090610739907f000000000000000000000000000000000000000000000000000000000000000090610581907f000000000000000000000000000000000000000000000000000000000000000061082f565b7f0000000000000000000000000000000000000000000000000000000000000000906107e1565b60208201525b610799610775612710876107cc565b610793836080015161078d8c8c87602001518d610865565b9061082f565b906108cd565b606082018190526040820151602090920151909b919a5098509650505050505050565b6b033b2e3c9fd0803ce800000090565b60006107d88284610acc565b90505b92915050565b60006107d88284610adf565b6000806107fb600284610af2565b90506108278361082161081a876b033b2e3c9fd0803ce800000061097e565b84906107e1565b9061098a565b949350505050565b60006107d86b033b2e3c9fd0803ce800000061082161084e868661097e565b6102c160026b033b2e3c9fd0803ce8000000610af2565b60008061087286866107e1565b905080600003610886576000915050610827565b60006108958561078d88610996565b905060006108a68561078d8a610996565b905060006108c06108b685610996565b61058185856107e1565b9998505050505050505050565b60008215806108da575081155b156108e7575060006107db565b816108f56002612710610af2565b61090190600019610acc565b61090b9190610af2565b8311156040518060400160405280600381526020016203230360ec1b815250906109515760405162461bcd60e51b81526004016109489190610b14565b60405180910390fd5b50612710610960600282610af2565b61096a8486610b62565b6109749190610adf565b6107d89190610af2565b60006107d88284610b62565b60006107d88284610af2565b60006107db82633b9aca0061097e565b6001600160a01b03811681146109bb57600080fd5b50565b60008060008060008060008060006101208a8c0312156109dd57600080fd5b8935985060208a01356109ef816109a6565b975060408a01356109ff816109a6565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e08201359550610100909101359350915050565b60008060008060008060c08789031215610a4f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208284031215610a8b57600080fd5b5051919050565b600060208284031215610aa457600080fd5b8151610aaf816109a6565b9392505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107db576107db610ab6565b808201808211156107db576107db610ab6565b600082610b0f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610b4157858101830151858201604001528201610b25565b506000604082860101526040601f19601f8301168501019250505092915050565b6000816000190483118215151615610b7c57610b7c610ab6565b50029056fea2646970667358221220b9696d36d84199f46617ec26b205bc5caf91a18f7fb7c5e906d3a5ed738abe9964736f6c63430008100033",
    "sourceMap": "958:9371:144:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3509:103;3587:17;3509:103;;;160:25:176;;;148:2;133:18;3509:103:144;;;;;;;;1590:48;;;;;1647:49;;;;;;;;-1:-1:-1;;;;;386:32:176;;;368:51;;356:2;341:18;1647:49:144;196:229:176;3863:173:144;;;:::i;3394:107::-;3474:19;3394:107;;3279;3359:19;3279:107;;4772:925;;;;;;:::i;:::-;;:::i;:::-;;;;1643:25:176;;;1699:2;1684:18;;1677:34;;;;1727:18;;;1720:34;1631:2;1616:18;4772:925:144;1441:319:176;6603:2429:144;;;;;;:::i;:::-;;:::i;1296:49::-;;;;;3731:124;3824:23;3731:124;;3620:103;3698:17;3620:103;;3863:173;3928:7;3955:73;4008:19;3955:48;:23;3983:19;3955:27;:48::i;:::-;:52;;:73::i;:::-;3948:80;;3863:173;:::o;4772:925::-;5288:42;;-1:-1:-1;;;5288:42:144;;-1:-1:-1;;;;;386:32:176;;;5288:42:144;;;368:51:176;5180:7:144;;;;;;;;5288:34;;;;;341:18:176;;5288:42:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5259:71;-1:-1:-1;5394:58:144;5437:14;5394:38;5259:71;5417:14;5394:22;:38::i;:::-;:42;;:58::i;:::-;5373:79;;5472:217;5508:9;5532:18;5565:15;5595:17;5627:23;5665:13;5472:21;:217::i;:::-;5465:224;;;;;;;4772:925;;;;;;;;;;;;;:::o;6603:2429::-;6930:7;6952;6974;7009:38;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7009:38:144;7077;:15;7097:17;7077:19;:38::i;:::-;7060:55;;;:14;7126:28;;;:32;;;7169:30;;;:34;;;7214:25;;;:29;7279:19;:115;;7378:14;;7333:61;;7355:38;;:18;;:22;:38::i;:::-;7333:14;;;:21;:61::i;:::-;7279:115;;;7315:1;7279:115;7256:4;:20;;:138;;;;;7458:15;-1:-1:-1;;;;;7458:37:144;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7438:94:144;;7533:9;7438:105;;;;;;;;;;;;;160:25:176;;148:2;133:18;;14:177;7438:105:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7407:28;;;:136;7560:20;;;;7583:24;-1:-1:-1;7556:979:144;;;7624:34;7661:82;7719:23;7661:50;7686:24;7661:4;:20;;;:24;;:50;;;;:::i;:::-;:57;;:82::i;:::-;7624:119;-1:-1:-1;7791:141:144;7865:52;:17;7624:119;7865:24;:52::i;:::-;7791:28;;;;:51;;7824:17;7791:32;:51::i;:141::-;7760:28;;;:172;7982:140;8053:54;:19;8080:26;8053;:54::i;:::-;7982:48;:23;8010:19;7982:27;:48::i;:140::-;7949:30;;;:173;-1:-1:-1;7556:979:144;;;8186:145;8237:79;8262:53;8290:24;8262:4;:20;;;:27;;:53;;;;:::i;:::-;8237:17;;:24;:79::i;:::-;8186:28;;;;;:32;:145::i;:::-;8155:28;;;:176;8427:20;;;;8381:142;;8427:81;;8483:24;;8427:48;;8455:19;8427:27;:48::i;:81::-;8381:23;;:27;:142::i;:::-;8348:30;;;:175;7556:979;8575:290;8813:51;470:3:133;8850:13:144;8813:36;:51::i;:::-;8575:216;8770:4;:20;;;8575:177;8611:15;8641:17;8673:4;:30;;;8718:23;8575:21;:177::i;:::-;:194;;:216::i;:::-;:237;;:290::i;:::-;8547:25;;;:318;;;8940:28;;;;8983:30;;;;;8547:318;;8940:28;;-1:-1:-1;8983:30:144;-1:-1:-1;6603:2429:144;-1:-1:-1;;;;;;;6603:2429:144:o;641:76:134:-;524:4;;641:76::o;3122:96:71:-;3180:7;3206:5;3210:1;3206;:5;:::i;:::-;3199:12;;3122:96;;;;;:::o;2755:::-;2813:7;2839:5;2843:1;2839;:5;:::i;1425:158:134:-;1486:7;;1522:5;1526:1;1522;:5;:::i;:::-;1506:21;-1:-1:-1;1547:28:134;1573:1;1547:21;1557:10;:1;524:4;1557:5;:10::i;:::-;1547:5;;:9;:21::i;:::-;:25;;:28::i;:::-;1540:35;1425:158;-1:-1:-1;;;;1425:158:134:o;1291:126::-;1352:7;1379:30;524:4;1379:21;1391:8;:1;1397;1391:5;:8::i;:::-;571:7;577:1;524:4;571:7;:::i;9597:729:144:-;9821:7;;9861:38;:15;9881:17;9861:19;:38::i;:::-;9841:58;;9916:9;9929:1;9916:14;9912:28;;9939:1;9932:8;;;;;9912:28;9953;9984:62;10020:25;9984:28;:17;:26;:28::i;:62::-;9953:93;;10059:26;10088:65;10122:30;10088:26;:15;:24;:26::i;:65::-;10059:94;;10166:25;10208:73;10260:20;:9;:18;:20::i;:::-;10208:44;:20;10233:18;10208:24;:44::i;:73::-;10166:115;9597:729;-1:-1:-1;;;;;;;;;9597:729:144:o;1026:333:133:-;1104:7;1123:10;;;:29;;-1:-1:-1;1137:15:133;;1123:29;1119:58;;;-1:-1:-1;1169:1:133;1162:8;;1119:58;1237:10;540:21;560:1;470:3;540:21;:::i;:::-;1201:32;;-1:-1:-1;;1201:32:133;:::i;:::-;1200:47;;;;:::i;:::-;1191:5;:56;;1249:35;;;;;;;;;;;;;-1:-1:-1;;;1249:35:133;;;1183:102;;;;;-1:-1:-1;;;1183:102:133;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;470:3:133;540:21;560:1;470:3;540:21;:::i;:::-;1300:18;1308:10;1300:5;:18;:::i;:::-;:33;;;;:::i;:::-;1299:55;;;;:::i;3465:96:71:-;3523:7;3549:5;3553:1;3549;:5;:::i;3850:96::-;3908:7;3934:5;3938:1;3934;:5;:::i;1771:107:134:-;1823:7;1850:20;:1;629:3;1850:5;:20::i;430:131:176:-;-1:-1:-1;;;;;505:31:176;;495:42;;485:70;;551:1;548;541:12;485:70;430:131;:::o;566:870::-;697:6;705;713;721;729;737;745;753;761;814:3;802:9;793:7;789:23;785:33;782:53;;;831:1;828;821:12;782:53;867:9;854:23;844:33;;927:2;916:9;912:18;899:32;940:31;965:5;940:31;:::i;:::-;990:5;-1:-1:-1;1047:2:176;1032:18;;1019:32;1060:33;1019:32;1060:33;:::i;:::-;566:870;;;;-1:-1:-1;1112:7:176;;1166:2;1151:18;;1138:32;;-1:-1:-1;1217:3:176;1202:19;;1189:33;;1269:3;1254:19;;1241:33;;-1:-1:-1;1321:3:176;1306:19;;1293:33;;-1:-1:-1;1373:3:176;1358:19;;1345:33;;-1:-1:-1;1425:3:176;1410:19;;;1397:33;;-1:-1:-1;566:870:176;-1:-1:-1;;566:870:176:o;1765:523::-;1869:6;1877;1885;1893;1901;1909;1962:3;1950:9;1941:7;1937:23;1933:33;1930:53;;;1979:1;1976;1969:12;1930:53;-1:-1:-1;;2002:23:176;;;2072:2;2057:18;;2044:32;;-1:-1:-1;2123:2:176;2108:18;;2095:32;;2174:2;2159:18;;2146:32;;-1:-1:-1;2225:3:176;2210:19;;2197:33;;-1:-1:-1;2277:3:176;2262:19;2249:33;;-1:-1:-1;1765:523:176;-1:-1:-1;1765:523:176:o;2501:184::-;2571:6;2624:2;2612:9;2603:7;2599:23;2595:32;2592:52;;;2640:1;2637;2630:12;2592:52;-1:-1:-1;2663:16:176;;2501:184;-1:-1:-1;2501:184:176:o;2690:251::-;2760:6;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2861:9;2855:16;2880:31;2905:5;2880:31;:::i;:::-;2930:5;2690:251;-1:-1:-1;;;2690:251:176:o;2946:127::-;3007:10;3002:3;2998:20;2995:1;2988:31;3038:4;3035:1;3028:15;3062:4;3059:1;3052:15;3078:128;3145:9;;;3166:11;;;3163:37;;;3180:18;;:::i;3211:125::-;3276:9;;;3297:10;;;3294:36;;;3310:18;;:::i;3341:217::-;3381:1;3407;3397:132;;3451:10;3446:3;3442:20;3439:1;3432:31;3486:4;3483:1;3476:15;3514:4;3511:1;3504:15;3397:132;-1:-1:-1;3543:9:176;;3341:217::o;3563:548::-;3675:4;3704:2;3733;3722:9;3715:21;3765:6;3759:13;3808:6;3803:2;3792:9;3788:18;3781:34;3833:1;3843:140;3857:6;3854:1;3851:13;3843:140;;;3952:14;;;3948:23;;3942:30;3918:17;;;3937:2;3914:26;3907:66;3872:10;;3843:140;;;3847:3;4032:1;4027:2;4018:6;4007:9;4003:22;3999:31;3992:42;4102:2;4095;4091:7;4086:2;4078:6;4074:15;4070:29;4059:9;4055:45;4051:54;4043:62;;;;3563:548;;;;:::o;4116:168::-;4156:7;4222:1;4218;4214:6;4210:14;4207:1;4204:21;4199:1;4192:9;4185:17;4181:45;4178:71;;;4229:18;;:::i;:::-;-1:-1:-1;4269:9:176;;4116:168::o",
    "linkReferences": {},
    "immutableReferences": {
      "67153": [
        {
          "start": 483,
          "length": 32
        },
        {
          "start": 1279,
          "length": 32
        },
        {
          "start": 1359,
          "length": 32
        },
        {
          "start": 1655,
          "length": 32
        },
        {
          "start": 1775,
          "length": 32
        }
      ],
      "67156": [
        {
          "start": 232,
          "length": 32
        },
        {
          "start": 1323,
          "length": 32
        }
      ],
      "67159": [
        {
          "start": 271,
          "length": 32
        },
        {
          "start": 1029,
          "length": 32
        }
      ],
      "67161": [
        {
          "start": 519,
          "length": 32
        },
        {
          "start": 636,
          "length": 32
        },
        {
          "start": 1564,
          "length": 32
        },
        {
          "start": 1851,
          "length": 32
        }
      ],
      "67163": [
        {
          "start": 377,
          "length": 32
        },
        {
          "start": 669,
          "length": 32
        },
        {
          "start": 1597,
          "length": 32
        },
        {
          "start": 1813,
          "length": 32
        }
      ],
      "67165": [
        {
          "start": 339,
          "length": 32
        },
        {
          "start": 600,
          "length": 32
        },
        {
          "start": 1522,
          "length": 32
        }
      ],
      "67167": [
        {
          "start": 176,
          "length": 32
        },
        {
          "start": 1473,
          "length": 32
        },
        {
          "start": 1707,
          "length": 32
        }
      ],
      "67169": [
        {
          "start": 557,
          "length": 32
        },
        {
          "start": 1425,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "EXCESS_UTILIZATION_RATE()": "17319873",
    "OPTIMAL_UTILIZATION_RATE()": "a15f30ac",
    "addressProvider()": "2954018c",
    "baseVariableBorrowRate()": "b2589544",
    "calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)": "9b9c5b49",
    "calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)": "7d8a872d",
    "maxVariableBorrowRate()": "643d41f2",
    "stableRateSlope1()": "0bdf953f",
    "stableRateSlope2()": "ccab01a3",
    "variableRateSlope1()": "7b832f58",
    "variableRateSlope2()": "65614f81"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"addressprovider_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"optimalUtilizationRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"EXCESS_UTILIZATION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_UTILIZATION_RATE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addressProvider\",\"outputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"calculateInterestRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"variableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"variableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"FluidNFT*\",\"details\":\"The model of interest rate is based on 2 slopes, one before the `OPTIMAL_UTILIZATION_RATE` point of utilization and another from that one to 100%\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Calculates the interest rates depending on the asset reserve's state and configurations.\",\"params\":{\"availableLiquidity\":\"The liquidity available in the corresponding fToken\",\"averageStableBorrowRate\":\"The weighted average of all the stable rate loans\",\"reserveFactor\":\"The reserve portion of the interest that goes to the treasury of the market\",\"totalStableDebt\":\"The total borrowed from the reserve at a stable rate\",\"totalVariableDebt\":\"The total borrowed from the reserve at a variable rate\"},\"returns\":{\"_0\":\"The liquidity rate, the stable borrow rate and the variable borrow rate*\"}},\"calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Calculates the interest rates depending on the reserve's state and configurations\",\"params\":{\"asset\":\"The address of the reserve asset\",\"fToken\":\"The address of the reserve fToken\",\"liquidityAdded\":\"The liquidity added during the operation\",\"liquidityTaken\":\"The liquidity taken during the operation\",\"reserveFactor\":\"The reserve portion of the interest that goes to the treasury of the market\",\"totalStableDebt\":\"The total borrowed from the reserve a stable rate\",\"totalVariableDebt\":\"The total borrowed from the reserve at a variable rate\"},\"returns\":{\"_0\":\"The liquidity rate, the stable borrow rate and the variable borrow rate*\"}}},\"stateVariables\":{\"EXCESS_UTILIZATION_RATE\":{\"details\":\"This constant represents the excess utilization rate above the optimal. It's always equal to 1-optimal utilization rate. Added as a constant here for gas optimizations. Expressed in ray*\"},\"OPTIMAL_UTILIZATION_RATE\":{\"details\":\"this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates. Expressed in ray*\"}},\"title\":\"InterestRateStrategy contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implfements the calculation of the interest rates depending on the reserve state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/protocol/risk/InterestRateStrategy.sol\":\"InterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@chainlink/=lib/chainlink/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2\",\"dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"keccak256\":\"0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65\",\"dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a\",\"dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X\"]},\"src/interfaces/IInterestRateStrategy.sol\":{\"keccak256\":\"0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3\",\"dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv\"]},\"src/interfaces/ILendingRateManager.sol\":{\"keccak256\":\"0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097\",\"dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6\"]},\"src/protocol/libraries/helpers/Errors.sol\":{\"keccak256\":\"0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3\",\"dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM\"]},\"src/protocol/libraries/math/PercentageMath.sol\":{\"keccak256\":\"0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262\",\"dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe\"]},\"src/protocol/libraries/math/WadRayMath.sol\":{\"keccak256\":\"0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93\",\"dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2\"]},\"src/protocol/risk/InterestRateStrategy.sol\":{\"keccak256\":\"0x15b2793f86d490b8d366e510d5a5c36f01450caf00bc748f1481a82ed02f7a0d\",\"license\":\"AGPL-3.0\",\"urls\":[\"bzz-raw://cbaedb9dd3f31336ec1c37844f19815a7d5c54bf271bbdaaea259f68ebfaf046\",\"dweb:/ipfs/QmUdVBDHqzL5AoNRMZxDyfAshSM315qgtrX4DBwidA8TdS\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "contract IAddressProvider",
              "name": "addressprovider_",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "optimalUtilizationRate_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "baseVariableBorrowRate_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "variableRateSlope1_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "variableRateSlope2_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stableRateSlope1_",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stableRateSlope2_",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "EXCESS_UTILIZATION_RATE",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "OPTIMAL_UTILIZATION_RATE",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "addressProvider",
          "outputs": [
            {
              "internalType": "contract IAddressProvider",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "baseVariableBorrowRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "availableLiquidity",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalVariableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "averageStableBorrowRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveFactor",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "calculateInterestRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "reserveId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "fToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "liquidityAdded",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidityTaken",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalVariableDebt",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "averageStableBorrowRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "reserveFactor",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "calculateInterestRates",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "maxVariableBorrowRate",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "stableRateSlope1",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "stableRateSlope2",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "variableRateSlope1",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "variableRateSlope2",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "calculateInterestRate(uint256,uint256,uint256,uint256,uint256,uint256)": {
            "details": "Calculates the interest rates depending on the asset reserve's state and configurations.",
            "params": {
              "availableLiquidity": "The liquidity available in the corresponding fToken",
              "averageStableBorrowRate": "The weighted average of all the stable rate loans",
              "reserveFactor": "The reserve portion of the interest that goes to the treasury of the market",
              "totalStableDebt": "The total borrowed from the reserve at a stable rate",
              "totalVariableDebt": "The total borrowed from the reserve at a variable rate"
            },
            "returns": {
              "_0": "The liquidity rate, the stable borrow rate and the variable borrow rate*"
            }
          },
          "calculateInterestRates(uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256)": {
            "details": "Calculates the interest rates depending on the reserve's state and configurations",
            "params": {
              "asset": "The address of the reserve asset",
              "fToken": "The address of the reserve fToken",
              "liquidityAdded": "The liquidity added during the operation",
              "liquidityTaken": "The liquidity taken during the operation",
              "reserveFactor": "The reserve portion of the interest that goes to the treasury of the market",
              "totalStableDebt": "The total borrowed from the reserve a stable rate",
              "totalVariableDebt": "The total borrowed from the reserve at a variable rate"
            },
            "returns": {
              "_0": "The liquidity rate, the stable borrow rate and the variable borrow rate*"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@chainlink/=lib/chainlink/",
        ":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
        ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        ":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/",
        ":ds-test/=lib/forge-std/lib/ds-test/src/",
        ":forge-std/=lib/forge-std/src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/protocol/risk/InterestRateStrategy.sol": "InterestRateStrategy"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": {
        "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff",
        "urls": [
          "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2",
          "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
        "keccak256": "0x0f633a0223d9a1dcccfcf38a64c9de0874dfcbfac0c6941ccf074d63a2ce0e1e",
        "urls": [
          "bzz-raw://864a40efcffdf408044c332a5aa38ec5618ed7b4eecb8f65faf45671bd6cdc65",
          "dweb:/ipfs/QmQJquTMtc6fgm5JQzGdsGpA2fqBe3MHWEdt2qzaLySMdN"
        ],
        "license": "MIT"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x6730abfcd8770e3279dad6137bf619ab98ee8b049e6dd85d2fbe87ba6224fde8",
        "urls": [
          "bzz-raw://9b7d1588eab025b049f858ab2f329be7fec220198d956b9b61bf0b9bddc5761a",
          "dweb:/ipfs/QmTaFkYSUfWmbpsyE2TKC1QvP6eTDggZ72ZWodBhydqt5X"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/IInterestRateStrategy.sol": {
        "keccak256": "0x71f8b91324433fbdb16a38e5b7c214e7c30094167a7aaf77fcb045194a63af16",
        "urls": [
          "bzz-raw://ce7a18b9c191a676ab68f5d59449c22bead494ccba0c2272e6c8bd606a1c0fd3",
          "dweb:/ipfs/QmZ4byVDnoAH67dSSXppkhTbvdNs7mmQadUnmreoeZVbSv"
        ],
        "license": "AGPL-3.0"
      },
      "src/interfaces/ILendingRateManager.sol": {
        "keccak256": "0x6078c32591ae3ced86c344ad2f228fbcc625f09cd59a8f7014355adb89dfcde0",
        "urls": [
          "bzz-raw://fa594c0ceb1a0a085a6b077ac0729663f839f33f760eb8775ff1b3d25415e097",
          "dweb:/ipfs/QmXU74R73UDHiwvVaU9LRrC1tHaDq5eCerenKQtFX97UL6"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/helpers/Errors.sol": {
        "keccak256": "0x490e76871922e89a13ba0bb88977be18c143fa9d0cd9afb033744a3d81479c52",
        "urls": [
          "bzz-raw://1c409d4d1e1689d8d8f3c3e361198d20f3b6476608c5316d8e2d91f52373e8e3",
          "dweb:/ipfs/QmRZaYpxqjmBpbxb51KqswKYPSeCsU3ejbmk5E3MrMxJaM"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/PercentageMath.sol": {
        "keccak256": "0xb84274fc3effba81036256cf7fde67b3dbfe86c4ffd0e062711a3270157952a2",
        "urls": [
          "bzz-raw://3ecaf26e713b39d89ee21fb8bfefe55fe2fec4a2f5a2bffba7612f82182b7262",
          "dweb:/ipfs/QmZ6oXpNspwBEkiJEz1EhsU4EVBpG3anNjtzcycNEgAkfe"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/libraries/math/WadRayMath.sol": {
        "keccak256": "0xb29e8edc0e0e6bfead27945357c9e4a66e0c11e58ff3b87ee68ed1b5ca416735",
        "urls": [
          "bzz-raw://d1b4377995155f32bb6c3ba558875c617fa63601c597099d3460063ac2a15d93",
          "dweb:/ipfs/QmUvCE6Q2J62sMgQCCEbQauWSYJpMiu3QCgWa6mZnEmcK2"
        ],
        "license": "AGPL-3.0"
      },
      "src/protocol/risk/InterestRateStrategy.sol": {
        "keccak256": "0x15b2793f86d490b8d366e510d5a5c36f01450caf00bc748f1481a82ed02f7a0d",
        "urls": [
          "bzz-raw://cbaedb9dd3f31336ec1c37844f19815a7d5c54bf271bbdaaea259f68ebfaf046",
          "dweb:/ipfs/QmUdVBDHqzL5AoNRMZxDyfAshSM315qgtrX4DBwidA8TdS"
        ],
        "license": "AGPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/protocol/risk/InterestRateStrategy.sol",
    "id": 67613,
    "exportedSymbols": {
      "IAddressProvider": [
        45718
      ],
      "IERC20Upgradeable": [
        27189
      ],
      "IInterestRateStrategy": [
        46846
      ],
      "ILendingRateManager": [
        47434
      ],
      "InterestRateStrategy": [
        67612
      ],
      "PercentageMath": [
        62719
      ],
      "SafeMath": [
        36719
      ],
      "WadRayMath": [
        62965
      ]
    },
    "nodeType": "SourceUnit",
    "src": "38:10291:144",
    "nodes": [
      {
        "id": 67124,
        "nodeType": "PragmaDirective",
        "src": "38:23:144",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 67126,
        "nodeType": "ImportDirective",
        "src": "65:83:144",
        "nodes": [],
        "absolutePath": "src/interfaces/IInterestRateStrategy.sol",
        "file": "../../interfaces/IInterestRateStrategy.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 46847,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67125,
              "name": "IInterestRateStrategy",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 46846,
              "src": "74:21:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67128,
        "nodeType": "ImportDirective",
        "src": "150:79:144",
        "nodes": [],
        "absolutePath": "src/interfaces/ILendingRateManager.sol",
        "file": "../../interfaces/ILendingRateManager.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 47435,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67127,
              "name": "ILendingRateManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 47434,
              "src": "159:19:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67130,
        "nodeType": "ImportDirective",
        "src": "231:73:144",
        "nodes": [],
        "absolutePath": "src/interfaces/IAddressProvider.sol",
        "file": "../../interfaces/IAddressProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 45719,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67129,
              "name": "IAddressProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45718,
              "src": "240:16:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67132,
        "nodeType": "ImportDirective",
        "src": "308:70:144",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/PercentageMath.sol",
        "file": "../libraries/math/PercentageMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 62720,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67131,
              "name": "PercentageMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 62719,
              "src": "317:14:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67134,
        "nodeType": "ImportDirective",
        "src": "380:62:144",
        "nodes": [],
        "absolutePath": "src/protocol/libraries/math/WadRayMath.sol",
        "file": "../libraries/math/WadRayMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 62966,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67133,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 62965,
              "src": "389:10:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67136,
        "nodeType": "ImportDirective",
        "src": "446:106:144",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 27190,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67135,
              "name": "IERC20Upgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 27189,
              "src": "455:17:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67138,
        "nodeType": "ImportDirective",
        "src": "554:75:144",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/utils/math/SafeMath.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 67613,
        "sourceUnit": 36720,
        "symbolAliases": [
          {
            "foreign": {
              "id": 67137,
              "name": "SafeMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 36719,
              "src": "563:8:144",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 67612,
        "nodeType": "ContractDefinition",
        "src": "958:9371:144",
        "nodes": [
          {
            "id": 67144,
            "nodeType": "UsingForDirective",
            "src": "1020:29:144",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 67142,
              "name": "WadRayMath",
              "nameLocations": [
                "1026:10:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 62965,
              "src": "1026:10:144"
            },
            "typeName": {
              "id": 67143,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1041:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 67147,
            "nodeType": "UsingForDirective",
            "src": "1055:27:144",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 67145,
              "name": "SafeMath",
              "nameLocations": [
                "1061:8:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 36719,
              "src": "1061:8:144"
            },
            "typeName": {
              "id": 67146,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1074:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 67150,
            "nodeType": "UsingForDirective",
            "src": "1088:33:144",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 67148,
              "name": "PercentageMath",
              "nameLocations": [
                "1094:14:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 62719,
              "src": "1094:14:144"
            },
            "typeName": {
              "id": 67149,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1113:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 67153,
            "nodeType": "VariableDeclaration",
            "src": "1296:49:144",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 67151,
              "nodeType": "StructuredDocumentation",
              "src": "1129:161:144",
              "text": " @dev this constant represents the utilization rate at which the pool aims to obtain most competitive borrow rates.\n Expressed in ray*"
            },
            "functionSelector": "a15f30ac",
            "mutability": "immutable",
            "name": "OPTIMAL_UTILIZATION_RATE",
            "nameLocation": "1321:24:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67152,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1296:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 67156,
            "nodeType": "VariableDeclaration",
            "src": "1590:48:144",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 67154,
              "nodeType": "StructuredDocumentation",
              "src": "1354:228:144",
              "text": " @dev This constant represents the excess utilization rate above the optimal. It's always equal to\n 1-optimal utilization rate. Added as a constant here for gas optimizations.\n Expressed in ray*"
            },
            "functionSelector": "17319873",
            "mutability": "immutable",
            "name": "EXCESS_UTILIZATION_RATE",
            "nameLocation": "1615:23:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67155,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1590:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "id": 67159,
            "nodeType": "VariableDeclaration",
            "src": "1647:49:144",
            "nodes": [],
            "constant": false,
            "functionSelector": "2954018c",
            "mutability": "immutable",
            "name": "addressProvider",
            "nameLocation": "1681:15:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IAddressProvider_$45718",
              "typeString": "contract IAddressProvider"
            },
            "typeName": {
              "id": 67158,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 67157,
                "name": "IAddressProvider",
                "nameLocations": [
                  "1647:16:144"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 45718,
                "src": "1647:16:144"
              },
              "referencedDeclaration": 45718,
              "src": "1647:16:144",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                "typeString": "contract IAddressProvider"
              }
            },
            "visibility": "public"
          },
          {
            "id": 67161,
            "nodeType": "VariableDeclaration",
            "src": "1783:50:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_baseVariableBorrowRate",
            "nameLocation": "1810:23:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67160,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1783:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67163,
            "nodeType": "VariableDeclaration",
            "src": "1963:46:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_variableRateSlope1",
            "nameLocation": "1990:19:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67162,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1963:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67165,
            "nodeType": "VariableDeclaration",
            "src": "2130:46:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_variableRateSlope2",
            "nameLocation": "2157:19:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67164,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2130:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67167,
            "nodeType": "VariableDeclaration",
            "src": "2304:44:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_stableRateSlope1",
            "nameLocation": "2331:17:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67166,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2304:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67169,
            "nodeType": "VariableDeclaration",
            "src": "2467:44:144",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "_stableRateSlope2",
            "nameLocation": "2494:17:144",
            "scope": 67612,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 67168,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2467:7:144",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 67225,
            "nodeType": "FunctionDefinition",
            "src": "2520:751:144",
            "nodes": [],
            "body": {
              "id": 67224,
              "nodeType": "Block",
              "src": "2815:456:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67187,
                      "name": "OPTIMAL_UTILIZATION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67153,
                      "src": "2826:24:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67188,
                      "name": "optimalUtilizationRate_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67174,
                      "src": "2853:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2826:50:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67190,
                  "nodeType": "ExpressionStatement",
                  "src": "2826:50:144"
                },
                {
                  "expression": {
                    "id": 67198,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67191,
                      "name": "EXCESS_UTILIZATION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67156,
                      "src": "2887:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67196,
                          "name": "optimalUtilizationRate_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67174,
                          "src": "2934:23:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 67192,
                              "name": "WadRayMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62965,
                              "src": "2913:10:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_WadRayMath_$62965_$",
                                "typeString": "type(library WadRayMath)"
                              }
                            },
                            "id": 67193,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2924:3:144",
                            "memberName": "ray",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 62753,
                            "src": "2913:14:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$",
                              "typeString": "function () pure returns (uint256)"
                            }
                          },
                          "id": 67194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2913:16:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67195,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2930:3:144",
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36598,
                        "src": "2913:20:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2913:45:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2887:71:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67199,
                  "nodeType": "ExpressionStatement",
                  "src": "2887:71:144"
                },
                {
                  "expression": {
                    "id": 67202,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67200,
                      "name": "addressProvider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67159,
                      "src": "2969:15:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67201,
                      "name": "addressprovider_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67172,
                      "src": "2987:16:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                        "typeString": "contract IAddressProvider"
                      }
                    },
                    "src": "2969:34:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "id": 67203,
                  "nodeType": "ExpressionStatement",
                  "src": "2969:34:144"
                },
                {
                  "expression": {
                    "id": 67206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67204,
                      "name": "_baseVariableBorrowRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67161,
                      "src": "3014:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67205,
                      "name": "baseVariableBorrowRate_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67176,
                      "src": "3040:23:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3014:49:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67207,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:49:144"
                },
                {
                  "expression": {
                    "id": 67210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67208,
                      "name": "_variableRateSlope1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67163,
                      "src": "3074:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67209,
                      "name": "variableRateSlope1_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67178,
                      "src": "3096:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3074:41:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67211,
                  "nodeType": "ExpressionStatement",
                  "src": "3074:41:144"
                },
                {
                  "expression": {
                    "id": 67214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67212,
                      "name": "_variableRateSlope2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67165,
                      "src": "3126:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67213,
                      "name": "variableRateSlope2_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67180,
                      "src": "3148:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3126:41:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67215,
                  "nodeType": "ExpressionStatement",
                  "src": "3126:41:144"
                },
                {
                  "expression": {
                    "id": 67218,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67216,
                      "name": "_stableRateSlope1",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67167,
                      "src": "3178:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67217,
                      "name": "stableRateSlope1_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67182,
                      "src": "3198:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3178:37:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67219,
                  "nodeType": "ExpressionStatement",
                  "src": "3178:37:144"
                },
                {
                  "expression": {
                    "id": 67222,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67220,
                      "name": "_stableRateSlope2",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67169,
                      "src": "3226:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 67221,
                      "name": "stableRateSlope2_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67184,
                      "src": "3246:17:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3226:37:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67223,
                  "nodeType": "ExpressionStatement",
                  "src": "3226:37:144"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 67185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67172,
                  "mutability": "mutable",
                  "name": "addressprovider_",
                  "nameLocation": "2559:16:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2542:33:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                    "typeString": "contract IAddressProvider"
                  },
                  "typeName": {
                    "id": 67171,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 67170,
                      "name": "IAddressProvider",
                      "nameLocations": [
                        "2542:16:144"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45718,
                      "src": "2542:16:144"
                    },
                    "referencedDeclaration": 45718,
                    "src": "2542:16:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                      "typeString": "contract IAddressProvider"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67174,
                  "mutability": "mutable",
                  "name": "optimalUtilizationRate_",
                  "nameLocation": "2594:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2586:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67173,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2586:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67176,
                  "mutability": "mutable",
                  "name": "baseVariableBorrowRate_",
                  "nameLocation": "2636:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2628:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67175,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2628:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67178,
                  "mutability": "mutable",
                  "name": "variableRateSlope1_",
                  "nameLocation": "2678:19:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2670:27:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67177,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2670:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67180,
                  "mutability": "mutable",
                  "name": "variableRateSlope2_",
                  "nameLocation": "2716:19:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2708:27:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67179,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2708:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67182,
                  "mutability": "mutable",
                  "name": "stableRateSlope1_",
                  "nameLocation": "2754:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2746:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67181,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2746:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67184,
                  "mutability": "mutable",
                  "name": "stableRateSlope2_",
                  "nameLocation": "2790:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67225,
                  "src": "2782:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2782:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2531:283:144"
            },
            "returnParameters": {
              "id": 67186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2815:0:144"
            },
            "scope": 67612,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 67233,
            "nodeType": "FunctionDefinition",
            "src": "3279:107:144",
            "nodes": [],
            "body": {
              "id": 67232,
              "nodeType": "Block",
              "src": "3341:45:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67230,
                    "name": "_variableRateSlope1",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67163,
                    "src": "3359:19:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67229,
                  "id": 67231,
                  "nodeType": "Return",
                  "src": "3352:26:144"
                }
              ]
            },
            "baseFunctions": [
              46772
            ],
            "functionSelector": "7b832f58",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "variableRateSlope1",
            "nameLocation": "3288:18:144",
            "parameters": {
              "id": 67226,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3306:2:144"
            },
            "returnParameters": {
              "id": 67229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67228,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67233,
                  "src": "3332:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3332:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3331:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67241,
            "nodeType": "FunctionDefinition",
            "src": "3394:107:144",
            "nodes": [],
            "body": {
              "id": 67240,
              "nodeType": "Block",
              "src": "3456:45:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67238,
                    "name": "_variableRateSlope2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67165,
                    "src": "3474:19:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67237,
                  "id": 67239,
                  "nodeType": "Return",
                  "src": "3467:26:144"
                }
              ]
            },
            "baseFunctions": [
              46777
            ],
            "functionSelector": "65614f81",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "variableRateSlope2",
            "nameLocation": "3403:18:144",
            "parameters": {
              "id": 67234,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3421:2:144"
            },
            "returnParameters": {
              "id": 67237,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67236,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67241,
                  "src": "3447:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67235,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3447:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3446:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67249,
            "nodeType": "FunctionDefinition",
            "src": "3509:103:144",
            "nodes": [],
            "body": {
              "id": 67248,
              "nodeType": "Block",
              "src": "3569:43:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67246,
                    "name": "_stableRateSlope1",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67167,
                    "src": "3587:17:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67245,
                  "id": 67247,
                  "nodeType": "Return",
                  "src": "3580:24:144"
                }
              ]
            },
            "baseFunctions": [
              46782
            ],
            "functionSelector": "0bdf953f",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stableRateSlope1",
            "nameLocation": "3518:16:144",
            "parameters": {
              "id": 67242,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3534:2:144"
            },
            "returnParameters": {
              "id": 67245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67244,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67249,
                  "src": "3560:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67243,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3560:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3559:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67257,
            "nodeType": "FunctionDefinition",
            "src": "3620:103:144",
            "nodes": [],
            "body": {
              "id": 67256,
              "nodeType": "Block",
              "src": "3680:43:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67254,
                    "name": "_stableRateSlope2",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67169,
                    "src": "3698:17:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67253,
                  "id": 67255,
                  "nodeType": "Return",
                  "src": "3691:24:144"
                }
              ]
            },
            "baseFunctions": [
              46787
            ],
            "functionSelector": "ccab01a3",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stableRateSlope2",
            "nameLocation": "3629:16:144",
            "parameters": {
              "id": 67250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3645:2:144"
            },
            "returnParameters": {
              "id": 67253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67252,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67257,
                  "src": "3671:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3671:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3670:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67266,
            "nodeType": "FunctionDefinition",
            "src": "3731:124:144",
            "nodes": [],
            "body": {
              "id": 67265,
              "nodeType": "Block",
              "src": "3806:49:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 67263,
                    "name": "_baseVariableBorrowRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67161,
                    "src": "3824:23:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67262,
                  "id": 67264,
                  "nodeType": "Return",
                  "src": "3817:30:144"
                }
              ]
            },
            "baseFunctions": [
              46792
            ],
            "functionSelector": "b2589544",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "baseVariableBorrowRate",
            "nameLocation": "3740:22:144",
            "overrides": {
              "id": 67259,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3779:8:144"
            },
            "parameters": {
              "id": 67258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3762:2:144"
            },
            "returnParameters": {
              "id": 67262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67261,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67266,
                  "src": "3797:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67260,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3797:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3796:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67281,
            "nodeType": "FunctionDefinition",
            "src": "3863:173:144",
            "nodes": [],
            "body": {
              "id": 67280,
              "nodeType": "Block",
              "src": "3937:99:144",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 67277,
                        "name": "_variableRateSlope2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67165,
                        "src": "4008:19:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 67274,
                            "name": "_variableRateSlope1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67163,
                            "src": "3983:19:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 67272,
                            "name": "_baseVariableBorrowRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67161,
                            "src": "3955:23:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67273,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3979:3:144",
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 36583,
                          "src": "3955:27:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3955:48:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4004:3:144",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36583,
                      "src": "3955:52:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3955:73:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67271,
                  "id": 67279,
                  "nodeType": "Return",
                  "src": "3948:80:144"
                }
              ]
            },
            "baseFunctions": [
              46797
            ],
            "functionSelector": "643d41f2",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "maxVariableBorrowRate",
            "nameLocation": "3872:21:144",
            "overrides": {
              "id": 67268,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3910:8:144"
            },
            "parameters": {
              "id": 67267,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3893:2:144"
            },
            "returnParameters": {
              "id": 67271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67270,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67281,
                  "src": "3928:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67269,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3928:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3927:9:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67339,
            "nodeType": "FunctionDefinition",
            "src": "4772:925:144",
            "nodes": [],
            "body": {
              "id": 67338,
              "nodeType": "Block",
              "src": "5248:449:144",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    67311
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67311,
                      "mutability": "mutable",
                      "name": "availableLiquidity",
                      "nameLocation": "5267:18:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67338,
                      "src": "5259:26:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67310,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5259:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67318,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67316,
                        "name": "fToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67288,
                        "src": "5323:6:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 67313,
                            "name": "asset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67286,
                            "src": "5306:5:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 67312,
                          "name": "IERC20Upgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27189,
                          "src": "5288:17:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$27189_$",
                            "typeString": "type(contract IERC20Upgradeable)"
                          }
                        },
                        "id": 67314,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5288:24:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Upgradeable_$27189",
                          "typeString": "contract IERC20Upgradeable"
                        }
                      },
                      "id": 67315,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5313:9:144",
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27146,
                      "src": "5288:34:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 67317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5288:42:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5259:71:144"
                },
                {
                  "expression": {
                    "id": 67327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 67319,
                      "name": "availableLiquidity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67311,
                      "src": "5373:18:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67325,
                          "name": "liquidityTaken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67292,
                          "src": "5437:14:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "id": 67322,
                              "name": "liquidityAdded",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67290,
                              "src": "5417:14:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 67320,
                              "name": "availableLiquidity",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67311,
                              "src": "5394:18:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67321,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5413:3:144",
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 36583,
                            "src": "5394:22:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5394:38:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67324,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5433:3:144",
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36598,
                        "src": "5394:42:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5394:58:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5373:79:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67328,
                  "nodeType": "ExpressionStatement",
                  "src": "5373:79:144"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 67330,
                        "name": "reserveId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67284,
                        "src": "5508:9:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67331,
                        "name": "availableLiquidity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67311,
                        "src": "5532:18:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67332,
                        "name": "totalStableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67294,
                        "src": "5565:15:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67333,
                        "name": "totalVariableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67296,
                        "src": "5595:17:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67334,
                        "name": "averageStableBorrowRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67298,
                        "src": "5627:23:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 67335,
                        "name": "reserveFactor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67300,
                        "src": "5665:13:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 67329,
                      "name": "calculateInterestRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67551,
                      "src": "5472:21:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) view returns (uint256,uint256,uint256)"
                      }
                    },
                    "id": 67336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5472:217:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 67309,
                  "id": 67337,
                  "nodeType": "Return",
                  "src": "5465:224:144"
                }
              ]
            },
            "baseFunctions": [
              46845
            ],
            "documentation": {
              "id": 67282,
              "nodeType": "StructuredDocumentation",
              "src": "4044:722:144",
              "text": " @dev Calculates the interest rates depending on the reserve's state and configurations\n @param asset The address of the reserve asset\n @param fToken The address of the reserve fToken\n @param liquidityAdded The liquidity added during the operation\n @param liquidityTaken The liquidity taken during the operation\n @param totalStableDebt The total borrowed from the reserve a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param reserveFactor The reserve portion of the interest that goes to the treasury of the market\n @return The liquidity rate, the stable borrow rate and the variable borrow rate*"
            },
            "functionSelector": "7d8a872d",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateInterestRates",
            "nameLocation": "4781:22:144",
            "overrides": {
              "id": 67302,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5139:8:144"
            },
            "parameters": {
              "id": 67301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67284,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "4822:9:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4814:17:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67283,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4814:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67286,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "4850:5:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4842:13:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67285,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4842:7:144",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67288,
                  "mutability": "mutable",
                  "name": "fToken",
                  "nameLocation": "4874:6:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4866:14:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 67287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4866:7:144",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67290,
                  "mutability": "mutable",
                  "name": "liquidityAdded",
                  "nameLocation": "4899:14:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4891:22:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67289,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4891:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67292,
                  "mutability": "mutable",
                  "name": "liquidityTaken",
                  "nameLocation": "4932:14:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4924:22:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67291,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4924:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67294,
                  "mutability": "mutable",
                  "name": "totalStableDebt",
                  "nameLocation": "4965:15:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4957:23:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4957:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67296,
                  "mutability": "mutable",
                  "name": "totalVariableDebt",
                  "nameLocation": "4999:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "4991:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67295,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4991:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67298,
                  "mutability": "mutable",
                  "name": "averageStableBorrowRate",
                  "nameLocation": "5035:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5027:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5027:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67300,
                  "mutability": "mutable",
                  "name": "reserveFactor",
                  "nameLocation": "5077:13:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5069:21:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67299,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5069:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4803:294:144"
            },
            "returnParameters": {
              "id": 67309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67304,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5180:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67303,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5180:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67306,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5202:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67305,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5202:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67308,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67339,
                  "src": "5224:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5224:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5165:77:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 67350,
            "nodeType": "StructDefinition",
            "src": "5705:229:144",
            "nodes": [],
            "canonicalName": "InterestRateStrategy.CalcInterestRatesLocalVars",
            "members": [
              {
                "constant": false,
                "id": 67341,
                "mutability": "mutable",
                "name": "totalDebt",
                "nameLocation": "5758:9:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5750:17:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67340,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5750:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67343,
                "mutability": "mutable",
                "name": "currentVariableBorrowRate",
                "nameLocation": "5786:25:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5778:33:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67342,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5778:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67345,
                "mutability": "mutable",
                "name": "currentStableBorrowRate",
                "nameLocation": "5830:23:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5822:31:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67344,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5822:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67347,
                "mutability": "mutable",
                "name": "currentLiquidityRate",
                "nameLocation": "5872:20:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5864:28:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67346,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5864:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 67349,
                "mutability": "mutable",
                "name": "utilizationRate",
                "nameLocation": "5911:15:144",
                "nodeType": "VariableDeclaration",
                "scope": 67350,
                "src": "5903:23:144",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 67348,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5903:7:144",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "CalcInterestRatesLocalVars",
            "nameLocation": "5712:26:144",
            "scope": 67612,
            "visibility": "public"
          },
          {
            "id": 67551,
            "nodeType": "FunctionDefinition",
            "src": "6603:2429:144",
            "nodes": [],
            "body": {
              "id": 67550,
              "nodeType": "Block",
              "src": "6998:2034:144",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    67375
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67375,
                      "mutability": "mutable",
                      "name": "vars",
                      "nameLocation": "7043:4:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67550,
                      "src": "7009:38:144",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                        "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars"
                      },
                      "typeName": {
                        "id": 67374,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 67373,
                          "name": "CalcInterestRatesLocalVars",
                          "nameLocations": [
                            "7009:26:144"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 67350,
                          "src": "7009:26:144"
                        },
                        "referencedDeclaration": 67350,
                        "src": "7009:26:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_storage_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67376,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7009:38:144"
                },
                {
                  "expression": {
                    "id": 67384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67377,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7060:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67379,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7065:9:144",
                      "memberName": "totalDebt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67341,
                      "src": "7060:14:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67382,
                          "name": "totalVariableDebt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67359,
                          "src": "7097:17:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 67380,
                          "name": "totalStableDebt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67357,
                          "src": "7077:15:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7093:3:144",
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36583,
                        "src": "7077:19:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7077:38:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7060:55:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67385,
                  "nodeType": "ExpressionStatement",
                  "src": "7060:55:144"
                },
                {
                  "expression": {
                    "id": 67390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67386,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7126:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67388,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7131:23:144",
                      "memberName": "currentStableBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67345,
                      "src": "7126:28:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 67389,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7157:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7126:32:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67391,
                  "nodeType": "ExpressionStatement",
                  "src": "7126:32:144"
                },
                {
                  "expression": {
                    "id": 67396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67392,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7169:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67394,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7174:25:144",
                      "memberName": "currentVariableBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67343,
                      "src": "7169:30:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 67395,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7202:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7169:34:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67397,
                  "nodeType": "ExpressionStatement",
                  "src": "7169:34:144"
                },
                {
                  "expression": {
                    "id": 67402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67398,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7214:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67400,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7219:20:144",
                      "memberName": "currentLiquidityRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67347,
                      "src": "7214:25:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 67401,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7242:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7214:29:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67403,
                  "nodeType": "ExpressionStatement",
                  "src": "7214:29:144"
                },
                {
                  "expression": {
                    "id": 67422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67404,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7256:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67406,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7261:15:144",
                      "memberName": "utilizationRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67349,
                      "src": "7256:20:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 67410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 67407,
                            "name": "vars",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67375,
                            "src": "7279:4:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                              "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                            }
                          },
                          "id": 67408,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7284:9:144",
                          "memberName": "totalDebt",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 67341,
                          "src": "7279:14:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 67409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7297:1:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7279:19:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 67417,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67375,
                                  "src": "7378:4:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                    "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                  }
                                },
                                "id": 67418,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7383:9:144",
                                "memberName": "totalDebt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 67341,
                                "src": "7378:14:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 67415,
                                "name": "availableLiquidity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67355,
                                "src": "7355:18:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67416,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7374:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "7355:22:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67419,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7355:38:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "expression": {
                              "id": 67412,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "7333:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67413,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7338:9:144",
                            "memberName": "totalDebt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67341,
                            "src": "7333:14:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7348:6:144",
                          "memberName": "rayDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62873,
                          "src": "7333:21:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7333:61:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67421,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "7279:115:144",
                      "trueExpression": {
                        "hexValue": "30",
                        "id": 67411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7315:1:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7256:138:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67423,
                  "nodeType": "ExpressionStatement",
                  "src": "7256:138:144"
                },
                {
                  "expression": {
                    "id": 67435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67424,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7407:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "7412:23:144",
                      "memberName": "currentStableBorrowRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67345,
                      "src": "7407:28:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 67433,
                          "name": "reserveId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67353,
                          "src": "7533:9:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 67428,
                                  "name": "addressProvider",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67159,
                                  "src": "7458:15:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IAddressProvider_$45718",
                                    "typeString": "contract IAddressProvider"
                                  }
                                },
                                "id": 67429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7474:21:144",
                                "memberName": "getLendingRateManager",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 45602,
                                "src": "7458:37:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 67430,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7458:39:144",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 67427,
                            "name": "ILendingRateManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 47434,
                            "src": "7438:19:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ILendingRateManager_$47434_$",
                              "typeString": "type(contract ILendingRateManager)"
                            }
                          },
                          "id": 67431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7438:60:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ILendingRateManager_$47434",
                            "typeString": "contract ILendingRateManager"
                          }
                        },
                        "id": 67432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "7513:19:144",
                        "memberName": "getMarketBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 47405,
                        "src": "7438:94:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view external returns (uint256)"
                        }
                      },
                      "id": 67434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7438:105:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7407:136:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67436,
                  "nodeType": "ExpressionStatement",
                  "src": "7407:136:144"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 67440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 67437,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "7560:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67438,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "7565:15:144",
                      "memberName": "utilizationRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67349,
                      "src": "7560:20:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 67439,
                      "name": "OPTIMAL_UTILIZATION_RATE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67153,
                      "src": "7583:24:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7560:47:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 67517,
                    "nodeType": "Block",
                    "src": "8140:395:144",
                    "statements": [
                      {
                        "expression": {
                          "id": 67499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67484,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "8155:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67486,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "8160:23:144",
                            "memberName": "currentStableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67345,
                            "src": "8155:28:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 67495,
                                        "name": "OPTIMAL_UTILIZATION_RATE",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 67153,
                                        "src": "8290:24:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "expression": {
                                          "id": 67492,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 67375,
                                          "src": "8262:4:144",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                          }
                                        },
                                        "id": 67493,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8267:15:144",
                                        "memberName": "utilizationRate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 67349,
                                        "src": "8262:20:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 67494,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8283:6:144",
                                      "memberName": "rayDiv",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 62873,
                                      "src": "8262:27:144",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 67496,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8262:53:144",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67490,
                                    "name": "_stableRateSlope1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67167,
                                    "src": "8237:17:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67491,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8255:6:144",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62846,
                                  "src": "8237:24:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67497,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8237:79:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "expression": {
                                  "id": 67487,
                                  "name": "vars",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67375,
                                  "src": "8186:4:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                    "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                  }
                                },
                                "id": 67488,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8191:23:144",
                                "memberName": "currentStableBorrowRate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 67345,
                                "src": "8186:28:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8215:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "8186:32:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67498,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8186:145:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8155:176:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67500,
                        "nodeType": "ExpressionStatement",
                        "src": "8155:176:144"
                      },
                      {
                        "expression": {
                          "id": 67515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67501,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "8348:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67503,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "8353:25:144",
                            "memberName": "currentVariableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67343,
                            "src": "8348:30:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 67512,
                                    "name": "OPTIMAL_UTILIZATION_RATE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67153,
                                    "src": "8483:24:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 67509,
                                        "name": "_variableRateSlope1",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 67163,
                                        "src": "8455:19:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "expression": {
                                          "id": 67506,
                                          "name": "vars",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 67375,
                                          "src": "8427:4:144",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                          }
                                        },
                                        "id": 67507,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8432:15:144",
                                        "memberName": "utilizationRate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 67349,
                                        "src": "8427:20:144",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 67508,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8448:6:144",
                                      "memberName": "rayMul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 62846,
                                      "src": "8427:27:144",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 67510,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8427:48:144",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8476:6:144",
                                  "memberName": "rayDiv",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62873,
                                  "src": "8427:55:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8427:81:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 67504,
                                "name": "_baseVariableBorrowRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67161,
                                "src": "8381:23:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67505,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8405:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "8381:27:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8381:142:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8348:175:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67516,
                        "nodeType": "ExpressionStatement",
                        "src": "8348:175:144"
                      }
                    ]
                  },
                  "id": 67518,
                  "nodeType": "IfStatement",
                  "src": "7556:979:144",
                  "trueBody": {
                    "id": 67483,
                    "nodeType": "Block",
                    "src": "7609:525:144",
                    "statements": [
                      {
                        "assignments": [
                          67442
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 67442,
                            "mutability": "mutable",
                            "name": "excessUtilizationRateRatio",
                            "nameLocation": "7632:26:144",
                            "nodeType": "VariableDeclaration",
                            "scope": 67483,
                            "src": "7624:34:144",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 67441,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "7624:7:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 67451,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 67449,
                              "name": "EXCESS_UTILIZATION_RATE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67156,
                              "src": "7719:23:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 67446,
                                  "name": "OPTIMAL_UTILIZATION_RATE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67153,
                                  "src": "7686:24:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "expression": {
                                    "id": 67443,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67375,
                                    "src": "7661:4:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                      "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                    }
                                  },
                                  "id": 67444,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7666:15:144",
                                  "memberName": "utilizationRate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 67349,
                                  "src": "7661:20:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 67445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7682:3:144",
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36598,
                                "src": "7661:24:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 67447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7661:50:144",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67448,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7712:6:144",
                            "memberName": "rayDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 62873,
                            "src": "7661:57:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7661:82:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7624:119:144"
                      },
                      {
                        "expression": {
                          "id": 67466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67452,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "7760:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67454,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "7765:23:144",
                            "memberName": "currentStableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67345,
                            "src": "7760:28:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 67463,
                                    "name": "excessUtilizationRateRatio",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67442,
                                    "src": "7890:26:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67461,
                                    "name": "_stableRateSlope2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67169,
                                    "src": "7865:17:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67462,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7883:6:144",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62846,
                                  "src": "7865:24:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67464,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7865:52:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 67458,
                                    "name": "_stableRateSlope1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67167,
                                    "src": "7824:17:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "expression": {
                                      "id": 67455,
                                      "name": "vars",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 67375,
                                      "src": "7791:4:144",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                        "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                      }
                                    },
                                    "id": 67456,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7796:23:144",
                                    "memberName": "currentStableBorrowRate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 67345,
                                    "src": "7791:28:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67457,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7820:3:144",
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36583,
                                  "src": "7791:32:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67459,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7791:51:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7843:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "7791:55:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67465,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7791:141:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7760:172:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67467,
                        "nodeType": "ExpressionStatement",
                        "src": "7760:172:144"
                      },
                      {
                        "expression": {
                          "id": 67481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 67468,
                              "name": "vars",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67375,
                              "src": "7949:4:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                              }
                            },
                            "id": 67470,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "7954:25:144",
                            "memberName": "currentVariableBorrowRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 67343,
                            "src": "7949:30:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 67478,
                                    "name": "excessUtilizationRateRatio",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67442,
                                    "src": "8080:26:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67476,
                                    "name": "_variableRateSlope2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67165,
                                    "src": "8053:19:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67477,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8073:6:144",
                                  "memberName": "rayMul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 62846,
                                  "src": "8053:26:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67479,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8053:54:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 67473,
                                    "name": "_variableRateSlope1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67163,
                                    "src": "8010:19:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 67471,
                                    "name": "_baseVariableBorrowRate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67161,
                                    "src": "7982:23:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 67472,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8006:3:144",
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36583,
                                  "src": "7982:27:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 67474,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7982:48:144",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 67475,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8031:3:144",
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36583,
                              "src": "7982:52:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 67480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7982:140:144",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7949:173:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67482,
                        "nodeType": "ExpressionStatement",
                        "src": "7949:173:144"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 67540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 67519,
                        "name": "vars",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67375,
                        "src": "8547:4:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                          "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                        }
                      },
                      "id": 67521,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "8552:20:144",
                      "memberName": "currentLiquidityRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 67347,
                      "src": "8547:25:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 67537,
                              "name": "reserveFactor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 67363,
                              "src": "8850:13:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 67534,
                                "name": "PercentageMath",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62719,
                                "src": "8813:14:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_PercentageMath_$62719_$",
                                  "typeString": "type(library PercentageMath)"
                                }
                              },
                              "id": 67535,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "8828:17:144",
                              "memberName": "PERCENTAGE_FACTOR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 62602,
                              "src": "8813:32:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67536,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8846:3:144",
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 36598,
                            "src": "8813:36:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8813:51:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 67530,
                                "name": "vars",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67375,
                                "src": "8770:4:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                  "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                }
                              },
                              "id": 67531,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8775:15:144",
                              "memberName": "utilizationRate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 67349,
                              "src": "8770:20:144",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 67523,
                                  "name": "totalStableDebt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67357,
                                  "src": "8611:15:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 67524,
                                  "name": "totalVariableDebt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67359,
                                  "src": "8641:17:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 67525,
                                    "name": "vars",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 67375,
                                    "src": "8673:4:144",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                                      "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                                    }
                                  },
                                  "id": 67526,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8678:25:144",
                                  "memberName": "currentVariableBorrowRate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 67343,
                                  "src": "8673:30:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 67527,
                                  "name": "averageStableBorrowRate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 67361,
                                  "src": "8718:23:144",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 67522,
                                "name": "_getOverallBorrowRate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67611,
                                "src": "8575:21:144",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 67528,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8575:177:144",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 67529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "8763:6:144",
                            "memberName": "rayMul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 62846,
                            "src": "8575:194:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 67532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8575:216:144",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 67533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8802:10:144",
                        "memberName": "percentMul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 62667,
                        "src": "8575:237:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 67539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8575:290:144",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8547:318:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 67541,
                  "nodeType": "ExpressionStatement",
                  "src": "8547:318:144"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "id": 67542,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67375,
                          "src": "8900:4:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                          }
                        },
                        "id": 67543,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8905:20:144",
                        "memberName": "currentLiquidityRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 67347,
                        "src": "8900:25:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 67544,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67375,
                          "src": "8940:4:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                          }
                        },
                        "id": 67545,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8945:23:144",
                        "memberName": "currentStableBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 67345,
                        "src": "8940:28:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 67546,
                          "name": "vars",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 67375,
                          "src": "8983:4:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CalcInterestRatesLocalVars_$67350_memory_ptr",
                            "typeString": "struct InterestRateStrategy.CalcInterestRatesLocalVars memory"
                          }
                        },
                        "id": 67547,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "8988:25:144",
                        "memberName": "currentVariableBorrowRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 67343,
                        "src": "8983:30:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 67548,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "8885:139:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 67372,
                  "id": 67549,
                  "nodeType": "Return",
                  "src": "8878:146:144"
                }
              ]
            },
            "baseFunctions": [
              46818
            ],
            "documentation": {
              "id": 67351,
              "nodeType": "StructuredDocumentation",
              "src": "5942:655:144",
              "text": " @dev Calculates the interest rates depending on the asset reserve's state and configurations.\n @param availableLiquidity The liquidity available in the corresponding fToken\n @param totalStableDebt The total borrowed from the reserve at a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param averageStableBorrowRate The weighted average of all the stable rate loans\n @param reserveFactor The reserve portion of the interest that goes to the treasury of the market\n @return The liquidity rate, the stable borrow rate and the variable borrow rate*"
            },
            "functionSelector": "9b9c5b49",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateInterestRate",
            "nameLocation": "6612:21:144",
            "overrides": {
              "id": 67365,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6889:8:144"
            },
            "parameters": {
              "id": 67364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67353,
                  "mutability": "mutable",
                  "name": "reserveId",
                  "nameLocation": "6652:9:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6644:17:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67352,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6644:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67355,
                  "mutability": "mutable",
                  "name": "availableLiquidity",
                  "nameLocation": "6680:18:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6672:26:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67354,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6672:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67357,
                  "mutability": "mutable",
                  "name": "totalStableDebt",
                  "nameLocation": "6717:15:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6709:23:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6709:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67359,
                  "mutability": "mutable",
                  "name": "totalVariableDebt",
                  "nameLocation": "6751:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6743:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6743:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67361,
                  "mutability": "mutable",
                  "name": "averageStableBorrowRate",
                  "nameLocation": "6787:23:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6779:31:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6779:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67363,
                  "mutability": "mutable",
                  "name": "reserveFactor",
                  "nameLocation": "6829:13:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6821:21:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67362,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6821:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6633:216:144"
            },
            "returnParameters": {
              "id": 67372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67367,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6930:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67366,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6930:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67369,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6952:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6952:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67371,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67551,
                  "src": "6974:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67370,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6974:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6915:77:144"
            },
            "scope": 67612,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 67611,
            "nodeType": "FunctionDefinition",
            "src": "9597:729:144",
            "nodes": [],
            "body": {
              "id": 67610,
              "nodeType": "Block",
              "src": "9830:496:144",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    67566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67566,
                      "mutability": "mutable",
                      "name": "totalDebt",
                      "nameLocation": "9849:9:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "9841:17:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67565,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9841:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67571,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67569,
                        "name": "totalVariableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67556,
                        "src": "9881:17:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 67567,
                        "name": "totalStableDebt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67554,
                        "src": "9861:15:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "9877:3:144",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36583,
                      "src": "9861:19:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67570,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9861:38:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9841:58:144"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 67574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 67572,
                      "name": "totalDebt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67566,
                      "src": "9916:9:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 67573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9929:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9916:14:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 67577,
                  "nodeType": "IfStatement",
                  "src": "9912:28:144",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 67575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9939:1:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 67564,
                    "id": 67576,
                    "nodeType": "Return",
                    "src": "9932:8:144"
                  }
                },
                {
                  "assignments": [
                    67579
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67579,
                      "mutability": "mutable",
                      "name": "weightedVariableRate",
                      "nameLocation": "9961:20:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "9953:28:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67578,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9953:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67586,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67584,
                        "name": "currentVariableBorrowRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67558,
                        "src": "10020:25:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 67580,
                            "name": "totalVariableDebt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67556,
                            "src": "9984:17:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10002:8:144",
                          "memberName": "wadToRay",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62908,
                          "src": "9984:26:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67582,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9984:28:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10013:6:144",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62846,
                      "src": "9984:35:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9984:62:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9953:93:144"
                },
                {
                  "assignments": [
                    67588
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67588,
                      "mutability": "mutable",
                      "name": "weightedStableRate",
                      "nameLocation": "10067:18:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "10059:26:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67587,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10059:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67595,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 67593,
                        "name": "currentAverageStableBorrowRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 67560,
                        "src": "10122:30:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 67589,
                            "name": "totalStableDebt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67554,
                            "src": "10088:15:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10104:8:144",
                          "memberName": "wadToRay",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62908,
                          "src": "10088:24:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10088:26:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10115:6:144",
                      "memberName": "rayMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62846,
                      "src": "10088:33:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10088:65:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10059:94:144"
                },
                {
                  "assignments": [
                    67597
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 67597,
                      "mutability": "mutable",
                      "name": "overallBorrowRate",
                      "nameLocation": "10174:17:144",
                      "nodeType": "VariableDeclaration",
                      "scope": 67610,
                      "src": "10166:25:144",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 67596,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10166:7:144",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 67607,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 67603,
                            "name": "totalDebt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67566,
                            "src": "10260:9:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67604,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10270:8:144",
                          "memberName": "wadToRay",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 62908,
                          "src": "10260:18:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10260:20:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "id": 67600,
                            "name": "weightedStableRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67588,
                            "src": "10233:18:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 67598,
                            "name": "weightedVariableRate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67579,
                            "src": "10208:20:144",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 67599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10229:3:144",
                          "memberName": "add",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 36583,
                          "src": "10208:24:144",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 67601,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10208:44:144",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 67602,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10253:6:144",
                      "memberName": "rayDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62873,
                      "src": "10208:51:144",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 67606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10208:73:144",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10166:115:144"
                },
                {
                  "expression": {
                    "id": 67608,
                    "name": "overallBorrowRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 67597,
                    "src": "10301:17:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 67564,
                  "id": 67609,
                  "nodeType": "Return",
                  "src": "10294:24:144"
                }
              ]
            },
            "documentation": {
              "id": 67552,
              "nodeType": "StructuredDocumentation",
              "src": "9040:551:144",
              "text": " @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable debt\n @param totalStableDebt The total borrowed from the reserve a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param currentVariableBorrowRate The current variable borrow rate of the reserve\n @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\n @return The weighted averaged borrow rate*"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getOverallBorrowRate",
            "nameLocation": "9606:21:144",
            "parameters": {
              "id": 67561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67554,
                  "mutability": "mutable",
                  "name": "totalStableDebt",
                  "nameLocation": "9646:15:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9638:23:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9638:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67556,
                  "mutability": "mutable",
                  "name": "totalVariableDebt",
                  "nameLocation": "9680:17:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9672:25:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67555,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9672:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67558,
                  "mutability": "mutable",
                  "name": "currentVariableBorrowRate",
                  "nameLocation": "9716:25:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9708:33:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9708:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 67560,
                  "mutability": "mutable",
                  "name": "currentAverageStableBorrowRate",
                  "nameLocation": "9760:30:144",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9752:38:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9752:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9627:170:144"
            },
            "returnParameters": {
              "id": 67564,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67563,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 67611,
                  "src": "9821:7:144",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 67562,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9821:7:144",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9820:9:144"
            },
            "scope": 67612,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 67140,
              "name": "IInterestRateStrategy",
              "nameLocations": [
                "991:21:144"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 46846,
              "src": "991:21:144"
            },
            "id": 67141,
            "nodeType": "InheritanceSpecifier",
            "src": "991:21:144"
          }
        ],
        "canonicalName": "InterestRateStrategy",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 67139,
          "nodeType": "StructuredDocumentation",
          "src": "633:323:144",
          "text": " @title InterestRateStrategy contract\n @notice Implfements the calculation of the interest rates depending on the reserve state\n @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_UTILIZATION_RATE`\n point of utilization and another from that one to 100%\n @author FluidNFT*"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          67612,
          46846
        ],
        "name": "InterestRateStrategy",
        "nameLocation": "967:20:144",
        "scope": 67613,
        "usedErrors": []
      }
    ],
    "license": "AGPL-3.0"
  },
  "id": 144
}

Last updated