{
  "id": "01962b29e522834b2c26f5af4b061772",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/loan/v1/interfaces/ILoan.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/loan/v1/interfaces/ILoan.sol\npragma solidity =0.6.11 >=0.6.0 <0.8.0;\n\n////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `recipient`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `sender` to `recipient` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n\n////// contracts/core/funds-distribution-token/v1/interfaces/IBasicFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/// @title BasicFDT implements the basic level FDT functionality for accounting for revenues.\ninterface IBasicFDT is IERC20 {\n\n    /**\n        @dev   This event emits when new funds are distributed.\n        @param by               The address of the sender that distributed funds.\n        @param fundsDistributed The amount of funds received for distribution.\n     */\n    event FundsDistributed(address indexed by, uint256 fundsDistributed);\n\n    /**\n        @dev   This event emits when distributed funds are withdrawn by a token holder.\n        @param by             The address of the receiver of funds.\n        @param fundsWithdrawn The amount of funds that were withdrawn.\n        @param totalWithdrawn The total amount of funds that were withdrawn.\n     */\n    event FundsWithdrawn(address indexed by, uint256 fundsWithdrawn, uint256 totalWithdrawn);\n\n    /**\n        @dev This event emits when the internal `pointsPerShare` is updated.\n        @dev First, and only, parameter is the new value of the internal `pointsPerShare`.\n     */\n    event PointsPerShareUpdated(uint256);\n\n    /**\n        @dev This event emits when an account's `pointsCorrection` is updated.\n        @dev First parameter is the address of some account.\n        @dev Second parameter is the new value of the account's `pointsCorrection`.\n     */\n    event PointsCorrectionUpdated(address indexed, int256);\n\n    /**\n        @dev    Returns the amount of funds that an account can withdraw.\n        @param  _owner The address of some FDT holder.\n        @return The amount funds that `_owner` can withdraw.\n     */\n    function withdrawableFundsOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev Withdraws all available funds for the calling FDT holder.\n     */\n    function withdrawFunds() external;\n\n    /**\n        @dev    Returns the amount of funds that an account has withdrawn.\n        @param  _owner The address of a token holder.\n        @return The amount of funds that `_owner` has withdrawn.\n     */\n    function withdrawnFundsOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev    Returns the amount of funds that an account has earned in total. \n        @dev    accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) \n                = (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier \n        @param  _owner The address of a token holder.\n        @return The amount of funds that `_owner` has earned in total.\n     */\n    function accumulativeFundsOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev Registers a payment of funds in tokens. \n        @dev May be called directly after a deposit is made. \n        @dev Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the new and previous \n             `fundsToken` balance and increments the total received funds (cumulative), by delta, by calling _distributeFunds().\n     */\n    function updateFundsReceived() external;\n\n}\n\n////// contracts/core/loan/v1/interfaces/ILoanFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from  \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IBasicFDT } from \"../../../funds-distribution-token/v1/interfaces/IBasicFDT.sol\"; */\n\ninterface ILoanFDT is IBasicFDT {\n\n    /**\n        @dev The `fundsToken` (dividends).\n     */\n    function fundsToken() external view returns (IERC20);\n\n    /**\n        @dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract.\n     */\n    function fundsTokenBalance() external view returns (uint256);\n\n    /**\n        @dev Withdraws all available funds for a token holder.\n    */\n    function withdrawFunds() external override;\n\n}\n\n////// contracts/core/loan/v1/interfaces/ILoan.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { ILoanFDT } from \"./ILoanFDT.sol\"; */\n\ninterface ILoan is ILoanFDT {\n\n    /**\n        Ready      = The Loan has been initialized and is ready for funding (assuming funding period hasn't ended).\n        Active     = The Loan has been drawdown and the Borrower is making payments.\n        Matured    = The Loan is fully paid off and has \"matured\".\n        Expired    = The Loan did not initiate, and all funding was returned to Lenders.\n        Liquidated = The Loan has been liquidated.\n     */\n    enum State { Ready, Active, Matured, Expired, Liquidated }\n\n    /**\n        @dev   Emits an event indicating the Loan was funded.\n        @param fundedBy     The Pool that funded the Loan.\n        @param amountFunded The amount the Loan was funded for.\n     */\n    event LoanFunded(address indexed fundedBy, uint256 amountFunded);\n\n    /**\n        @dev   Emits an event indicating the balance for an account was updated.\n        @param account The address of an account.\n        @param token   The token address of the asset.\n        @param balance The new balance of `token` for `account`.\n     */\n    event BalanceUpdated(address indexed account, address indexed token, uint256 balance);\n\n    /**\n        @dev   Emits an event indicating the some loaned amount was drawn down.\n        @param drawdownAmount The amount that was drawn down.\n     */\n    event Drawdown(uint256 drawdownAmount);\n\n    /**\n        @dev   Emits an event indicating the state of the Loan changed.\n        @param state The state of the Loan.\n     */\n    event LoanStateChanged(State state);\n\n    /**\n        @dev   Emits an event indicating the an Admin for the Loan was set.\n        @param loanAdmin The address of some Loan Admin.\n        @param allowed   Whether `loanAdmin` is a Loan Admin for this Loan.\n     */\n    event LoanAdminSet(address indexed loanAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating the a payment was made for the Loan.\n        @param totalPaid         The total amount paid.\n        @param principalPaid     The principal portion of the amount paid.\n        @param interestPaid      The interest portion of the amount paid.\n        @param paymentsRemaining The amount of payment remaining.\n        @param principalOwed     The outstanding principal of the Loan.\n        @param nextPaymentDue    The timestamp of the due date of the next payment.\n        @param latePayment       Whether this payment was late.\n     */\n    event PaymentMade(\n        uint256 totalPaid,\n        uint256 principalPaid,\n        uint256 interestPaid,\n        uint256 paymentsRemaining,\n        uint256 principalOwed,\n        uint256 nextPaymentDue,\n        bool latePayment\n    );\n\n    /**\n        @dev   Emits an event indicating the the Loan was liquidated.\n        @param collateralSwapped      The amount of Collateral Asset swapped.\n        @param liquidityAssetReturned The amount of Liquidity Asset recovered from swap.\n        @param liquidationExcess      The amount of Liquidity Asset returned to borrower.\n        @param defaultSuffered        The remaining losses after the liquidation.\n     */\n    event Liquidation(\n        uint256 collateralSwapped,\n        uint256 liquidityAssetReturned,\n        uint256 liquidationExcess,\n        uint256 defaultSuffered\n    );\n\n    /**\n        @dev The current state of this Loan, as defined in the State enum below.\n     */\n    function loanState() external view returns (State);\n\n    /**\n        @dev The asset deposited by Lenders into the FundingLocker, when funding this Loan.\n     */\n    function liquidityAsset() external view returns (IERC20);\n\n    /**\n        @dev The asset deposited by Borrower into the CollateralLocker, for collateralizing this Loan.\n     */\n    function collateralAsset() external view returns (IERC20);\n\n    /**\n        @dev The FundingLocker that holds custody of Loan funds before drawdown.\n     */\n    function fundingLocker() external view returns (address);\n\n    /**\n        @dev The FundingLockerFactory.\n     */\n    function flFactory() external view returns (address);\n\n    /**\n        @dev The CollateralLocker that holds custody of Loan collateral.\n     */\n    function collateralLocker() external view returns (address);\n\n    /**\n        @dev The CollateralLockerFactory.\n     */\n    function clFactory() external view returns (address);\n\n    /**\n        @dev The Borrower of this Loan, responsible for repayments.\n     */\n    function borrower() external view returns (address);\n\n    /**\n        @dev The RepaymentCalc for this Loan.\n     */\n    function repaymentCalc() external view returns (address);\n\n    /**\n        @dev The LateFeeCalc for this Loan.\n     */\n    function lateFeeCalc() external view returns (address);\n\n    /**\n        @dev The PremiumCalc for this Loan.\n     */\n    function premiumCalc() external view returns (address);\n\n    /**\n        @dev The LoanFactory that deployed this Loan.\n     */\n    function superFactory() external view returns (address);\n\n    /**\n        @param  loanAdmin The address of some admin.\n        @return Whether the `loanAdmin` has permission to do certain operations in case of disaster management.\n     */\n    function loanAdmins(address loanAdmin) external view returns (bool);\n\n    /**\n        @dev The unix timestamp due date of the next payment.\n     */\n    function nextPaymentDue() external view returns (uint256);\n\n    /**\n        @dev The APR in basis points.\n     */\n    function apr() external view returns (uint256);\n\n    /**\n        @dev The number of payments remaining on the Loan.\n     */\n    function paymentsRemaining() external view returns (uint256);\n\n    /**\n        @dev The total length of the Loan term in days.\n     */\n    function termDays() external view returns (uint256);\n\n    /**\n        @dev The time between Loan payments in seconds.\n     */\n    function paymentIntervalSeconds() external view returns (uint256);\n\n    /**\n        @dev The total requested amount for Loan.\n     */\n    function requestAmount() external view returns (uint256);\n\n    /**\n        @dev The percentage of value of the drawdown amount to post as collateral in basis points.\n     */\n    function collateralRatio() external view returns (uint256);\n\n    /**\n        @dev The timestamp of when Loan was instantiated.\n     */\n    function createdAt() external view returns (uint256);\n\n    /**\n        @dev The time for a Loan to be funded in seconds.\n     */\n    function fundingPeriod() external view returns (uint256);\n\n    /**\n        @dev The time a Borrower has, after a payment is due, to make a payment before a liquidation can occur.\n     */\n    function defaultGracePeriod() external view returns (uint256);\n\n    /**\n        @dev The amount of principal owed (initially the drawdown amount).\n     */\n    function principalOwed() external view returns (uint256);\n\n    /**\n        @dev The amount of principal that has been paid by the Borrower since the Loan instantiation.\n     */\n    function principalPaid() external view returns (uint256);\n\n    /**\n        @dev The amount of interest that has been paid by the Borrower since the Loan instantiation.\n     */\n    function interestPaid() external view returns (uint256);\n\n    /**\n        @dev The amount of fees that have been paid by the Borrower since the Loan instantiation.\n     */\n    function feePaid() external view returns (uint256);\n\n    /**\n        @dev The amount of excess that has been returned to the Lenders after the Loan drawdown.\n     */\n    function excessReturned() external view returns (uint256);\n\n    /**\n        @dev The amount of Collateral Asset that has been liquidated after default.\n     */\n    function amountLiquidated() external view returns (uint256);\n\n    /**\n        @dev The amount of Liquidity Asset that has been recovered after default.\n     */\n    function amountRecovered() external view returns (uint256);\n\n    /**\n        @dev The difference between `amountRecovered` and `principalOwed` after liquidation.\n     */\n    function defaultSuffered() external view returns (uint256);\n\n    /**\n        @dev The amount of Liquidity Asset that is to be returned to the Borrower, if `amountRecovered > principalOwed`.\n     */\n    function liquidationExcess() external view returns (uint256);\n\n    /**\n        @dev   Draws down funding from FundingLocker, posts collateral, and transitions the Loan state from `Ready` to `Active`. \n        @dev   Only the Borrower can call this function. \n        @dev   It emits four `BalanceUpdated` events. \n        @dev   It emits a `LoanStateChanged` event. \n        @dev   It emits a `Drawdown` event. \n        @param amt the amount of Liquidity Asset the Borrower draws down. Remainder is returned to the Loan where it can be claimed back by LoanFDT holders.\n     */\n    function drawdown(uint256 amt) external;\n\n    /**\n        @dev Makes a payment for this Loan. \n        @dev Amounts are calculated for the Borrower. \n     */\n    function makePayment() external;\n\n    /**\n        @dev Makes the full payment for this Loan (a.k.a. \"calling\" the Loan). \n        @dev This requires the Borrower to pay a premium fee. \n     */\n    function makeFullPayment() external;\n    \n    /**\n        @dev   Funds this Loan and mints LoanFDTs for `mintTo` (DebtLocker in the case of Pool funding). \n        @dev   Only LiquidityLocker using valid/approved Pool can call this function. \n        @dev   It emits a `LoanFunded` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param mintTo The address that LoanFDTs are minted to.\n        @param amt    The amount to fund the Loan.\n     */\n    function fundLoan(address mintTo, uint256 amt) external;\n\n    /**\n        @dev Handles returning capital to the Loan, where it can be claimed back by LoanFDT holders, \n             if the Borrower has not drawn down on the Loan past the drawdown grace period. \n        @dev It emits a `LoanStateChanged` event. \n     */\n    function unwind() external;\n\n    /**\n        @dev Triggers a default if the Loan meets certain default conditions, liquidating all collateral and updating accounting. \n        @dev Only the an account with sufficient LoanFDTs of this Loan can call this function. \n        @dev It emits a `BalanceUpdated` event. \n        @dev It emits a `Liquidation` event. \n        @dev It emits a `LoanStateChanged` event. \n     */\n    function triggerDefault() external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. Only the Borrower or a Loan Admin can call this function. \n     */\n    function pause() external;\n\n    /**\n        @dev Triggers unpaused state. \n        @dev Restores functionality for certain functions. \n        @dev Only the Borrower or a Loan Admin can call this function. \n     */\n    function unpause() external;\n\n    /**\n        @dev   Sets a Loan Admin. \n        @dev   Only the Borrower can call this function. \n        @dev   It emits a `LoanAdminSet` event. \n        @param loanAdmin The address being allowed or disallowed as a Loan Admin.\n        @param allowed   The atatus of a Loan Admin.\n     */\n    function setLoanAdmin(address loanAdmin, bool allowed) external;\n\n    /**\n        @dev   Transfers any locked funds to the Governor. \n        @dev   Only the Governor can call this function. \n        @param token The address of the token to be reclaimed.\n     */\n    function reclaimERC20(address token) external;\n\n    /**\n        @dev Withdraws all available funds earned through LoanFDT for a token holder. \n        @dev It emits a `BalanceUpdated` event. \n     */\n    function withdrawFunds() external override;\n\n    /**\n        @dev    Returns the expected amount of Liquidity Asset to be recovered from a liquidation based on current oracle prices.\n        @return The minimum amount of Liquidity Asset that can be expected by swapping Collateral Asset.\n     */\n    function getExpectedAmountRecovered() external view returns (uint256);\n\n    /**\n        @dev    Returns information of the next payment amount.\n        @return The entitled interest of the next payment (Principal + Interest only when the next payment is last payment of the Loan).\n        @return The entitled principal amount needed to be paid in the next payment.\n        @return The entitled interest amount needed to be paid in the next payment.\n        @return The payment due date.\n        @return Whether the payment is late.\n     */\n    function getNextPayment() external view returns (uint256, uint256, uint256, uint256, bool);\n\n    /**\n        @dev    Returns the information of a full payment amount.\n        @return total     Principal and interest owed, combined.\n        @return principal Principal owed.\n        @return interest  Interest owed.\n     */\n    function getFullPayment() external view returns (uint256 total, uint256 principal, uint256 interest);\n\n    /**\n        @dev    Calculates the collateral required to draw down amount.\n        @param  amt The amount of the Liquidity Asset to draw down from the FundingLocker.\n        @return The amount of the Collateral Asset required to post in the CollateralLocker for a given drawdown amount.\n     */\n    function collateralRequiredForDrawdown(uint256 amt) external view returns (uint256);\n\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/core/loan/v1/interfaces/ILoan.sol": {
        "IBasicFDT": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IERC20": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          }
        },
        "ILoan": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                }
              ],
              "name": "BalanceUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "drawdownAmount",
                  "type": "uint256"
                }
              ],
              "name": "Drawdown",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "collateralSwapped",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityAssetReturned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidationExcess",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "defaultSuffered",
                  "type": "uint256"
                }
              ],
              "name": "Liquidation",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loanAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "LoanAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "fundedBy",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "enum ILoan.State",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "name": "LoanStateChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalPaid",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principalPaid",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "interestPaid",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "paymentsRemaining",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principalOwed",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "nextPaymentDue",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "latePayment",
                  "type": "bool"
                }
              ],
              "name": "PaymentMade",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "amountLiquidated",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "amountRecovered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "apr",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "borrower",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "clFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collateralAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collateralLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "collateralRatio",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "collateralRequiredForDrawdown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "createdAt",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "defaultGracePeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "defaultSuffered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "drawdown",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "excessReturned",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "feePaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "flFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "mintTo",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundingLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundingPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsToken",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsTokenBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getExpectedAmountRecovered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getFullPayment",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "total",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "principal",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "interest",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getNextPayment",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lateFeeCalc",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidationExcess",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanAdmin",
                  "type": "address"
                }
              ],
              "name": "loanAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "loanState",
              "outputs": [
                {
                  "internalType": "enum ILoan.State",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "makeFullPayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "makePayment",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "nextPaymentDue",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paymentIntervalSeconds",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paymentsRemaining",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "premiumCalc",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalOwed",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "token",
                  "type": "address"
                }
              ],
              "name": "reclaimERC20",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "repaymentCalc",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "requestAmount",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setLoanAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "superFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "termDays",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unwind",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "allowance(address,address)": "dd62ed3e",
              "amountLiquidated()": "c9f4e490",
              "amountRecovered()": "39c02899",
              "approve(address,uint256)": "095ea7b3",
              "apr()": "57ded9c9",
              "balanceOf(address)": "70a08231",
              "borrower()": "7df1f1b9",
              "clFactory()": "e74f6166",
              "collateralAsset()": "aabaecd6",
              "collateralLocker()": "09f64d08",
              "collateralRatio()": "b4eae1cb",
              "collateralRequiredForDrawdown(uint256)": "da9bf6e0",
              "createdAt()": "cf09e0d0",
              "defaultGracePeriod()": "705d5f24",
              "defaultSuffered()": "4b27ef6c",
              "drawdown(uint256)": "a079a4dd",
              "excessReturned()": "31a7958f",
              "feePaid()": "ac7c5780",
              "flFactory()": "2c3c1216",
              "fundLoan(address,uint256)": "e920b1e1",
              "fundingLocker()": "743e5d1d",
              "fundingPeriod()": "74d7c62b",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "getExpectedAmountRecovered()": "c296dcba",
              "getFullPayment()": "77903e3b",
              "getNextPayment()": "4ae01cdc",
              "interestPaid()": "e48671c4",
              "lateFeeCalc()": "5e8bdbeb",
              "liquidationExcess()": "cee96669",
              "liquidityAsset()": "209b2bca",
              "loanAdmins(address)": "4be7cb14",
              "loanState()": "25af34cd",
              "makeFullPayment()": "60bd1f87",
              "makePayment()": "d8d79700",
              "nextPaymentDue()": "b4198570",
              "pause()": "8456cb59",
              "paymentIntervalSeconds()": "f5552788",
              "paymentsRemaining()": "0895326f",
              "premiumCalc()": "757116a0",
              "principalOwed()": "19350114",
              "principalPaid()": "64195ba8",
              "reclaimERC20(address)": "8905fd4f",
              "repaymentCalc()": "06775458",
              "requestAmount()": "f52ec46c",
              "setLoanAdmin(address,bool)": "92769d94",
              "superFactory()": "0d49b38c",
              "termDays()": "469cbfdb",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "triggerDefault()": "175f8329",
              "unpause()": "3f4ba83a",
              "unwind()": "807763ab",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "ILoanFDT": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Approval",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsDistributed",
                  "type": "uint256"
                }
              ],
              "name": "FundsDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "by",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fundsWithdrawn",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "totalWithdrawn",
                  "type": "uint256"
                }
              ],
              "name": "FundsWithdrawn",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "PointsCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "PointsPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "Transfer",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "accumulativeFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                }
              ],
              "name": "allowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "approve",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsToken",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundsTokenBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferFrom",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "withdrawFunds",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawableFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "withdrawnFundsOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "accumulativeFundsOf(address)": "4e97415f",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/core/loan/v1/interfaces/ILoan.sol": {
        "ast": {
          "absolutePath": "contracts/core/loan/v1/interfaces/ILoan.sol",
          "exportedSymbols": {
            "IBasicFDT": [
              141
            ],
            "IERC20": [
              77
            ],
            "ILoan": [
              520
            ],
            "ILoanFDT": [
              161
            ]
          },
          "id": 521,
          "license": "AGPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "=",
                "0.6",
                ".11",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "120:39:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "267:70:0",
                "text": " @dev Interface of the ERC20 standard as defined in the EIP."
              },
              "fullyImplemented": false,
              "id": 77,
              "linearizedBaseContracts": [
                77
              ],
              "name": "IERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3,
                    "nodeType": "StructuredDocumentation",
                    "src": "361:66:0",
                    "text": " @dev Returns the amount of tokens in existence."
                  },
                  "functionSelector": "18160ddd",
                  "id": 8,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "452:2:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "478:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "478:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "477:9:0"
                  },
                  "scope": 77,
                  "src": "432:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 9,
                    "nodeType": "StructuredDocumentation",
                    "src": "493:72:0",
                    "text": " @dev Returns the amount of tokens owned by `account`."
                  },
                  "functionSelector": "70a08231",
                  "id": 16,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 12,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 11,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "589:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "589:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "588:17:0"
                  },
                  "returnParameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 14,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "629:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "629:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "628:9:0"
                  },
                  "scope": 77,
                  "src": "570:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "644:209:0",
                    "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 26,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 22,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 19,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "876:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "876:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 21,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "895:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "895:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "875:35:0"
                  },
                  "returnParameters": {
                    "id": 25,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 24,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "929:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 23,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "929:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "928:6:0"
                  },
                  "scope": 77,
                  "src": "858:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 27,
                    "nodeType": "StructuredDocumentation",
                    "src": "941:264:0",
                    "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 36,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 32,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 29,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1229:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 28,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1229:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 31,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1244:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 30,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1244:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1228:32:0"
                  },
                  "returnParameters": {
                    "id": 35,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 34,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1284:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1284:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1283:9:0"
                  },
                  "scope": 77,
                  "src": "1210:83:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 37,
                    "nodeType": "StructuredDocumentation",
                    "src": "1299:642:0",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 46,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 42,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 39,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "1963:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 38,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1963:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 41,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "1980:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 40,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1980:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1962:33:0"
                  },
                  "returnParameters": {
                    "id": 45,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 44,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "2014:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 43,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2014:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2013:6:0"
                  },
                  "scope": 77,
                  "src": "1946:74:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 47,
                    "nodeType": "StructuredDocumentation",
                    "src": "2026:296:0",
                    "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
                  },
                  "functionSelector": "23b872dd",
                  "id": 58,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 54,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 49,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2349:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 48,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2349:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 51,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2365:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 50,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2365:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 53,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2384:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2384:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2348:51:0"
                  },
                  "returnParameters": {
                    "id": 57,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 56,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2418:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 55,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2418:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2417:6:0"
                  },
                  "scope": 77,
                  "src": "2327:97:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 59,
                    "nodeType": "StructuredDocumentation",
                    "src": "2430:158:0",
                    "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
                  },
                  "id": 67,
                  "name": "Transfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 66,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 61,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 67,
                        "src": "2608:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 60,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2608:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 63,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 67,
                        "src": "2630:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2630:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 65,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 67,
                        "src": "2650:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 64,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2650:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2607:57:0"
                  },
                  "src": "2593:72:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "2671:148:0",
                    "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
                  },
                  "id": 76,
                  "name": "Approval",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 75,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 70,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "2839:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 69,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2839:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 72,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "2862:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 71,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2862:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 74,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 76,
                        "src": "2887:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2887:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2838:63:0"
                  },
                  "src": "2824:78:0"
                }
              ],
              "scope": 521,
              "src": "338:2566:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 79,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "3237:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 80,
                  "nodeType": "InheritanceSpecifier",
                  "src": "3237:6:0"
                }
              ],
              "contractDependencies": [
                77
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 78,
                "nodeType": "StructuredDocumentation",
                "src": "3120:94:0",
                "text": "@title BasicFDT implements the basic level FDT functionality for accounting for revenues."
              },
              "fullyImplemented": false,
              "id": 141,
              "linearizedBaseContracts": [
                141,
                77
              ],
              "name": "IBasicFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 81,
                    "nodeType": "StructuredDocumentation",
                    "src": "3251:236:0",
                    "text": "@dev   This event emits when new funds are distributed.\n@param by               The address of the sender that distributed funds.\n@param fundsDistributed The amount of funds received for distribution."
                  },
                  "id": 87,
                  "name": "FundsDistributed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 86,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 83,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "by",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 87,
                        "src": "3515:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 82,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3515:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 85,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fundsDistributed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 87,
                        "src": "3535:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 84,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3535:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3514:46:0"
                  },
                  "src": "3492:69:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 88,
                    "nodeType": "StructuredDocumentation",
                    "src": "3567:315:0",
                    "text": "@dev   This event emits when distributed funds are withdrawn by a token holder.\n@param by             The address of the receiver of funds.\n@param fundsWithdrawn The amount of funds that were withdrawn.\n@param totalWithdrawn The total amount of funds that were withdrawn."
                  },
                  "id": 96,
                  "name": "FundsWithdrawn",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 95,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 90,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "by",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3908:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 89,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3908:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 92,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fundsWithdrawn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3928:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 91,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3928:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 94,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "totalWithdrawn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 96,
                        "src": "3952:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 93,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3952:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3907:68:0"
                  },
                  "src": "3887:89:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 97,
                    "nodeType": "StructuredDocumentation",
                    "src": "3982:179:0",
                    "text": "@dev This event emits when the internal `pointsPerShare` is updated.\n@dev First, and only, parameter is the new value of the internal `pointsPerShare`."
                  },
                  "id": 101,
                  "name": "PointsPerShareUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 99,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 101,
                        "src": "4194:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4194:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4193:9:0"
                  },
                  "src": "4166:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 102,
                    "nodeType": "StructuredDocumentation",
                    "src": "4209:235:0",
                    "text": "@dev This event emits when an account's `pointsCorrection` is updated.\n@dev First parameter is the address of some account.\n@dev Second parameter is the new value of the account's `pointsCorrection`."
                  },
                  "id": 108,
                  "name": "PointsCorrectionUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 107,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 104,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 108,
                        "src": "4479:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 103,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4479:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 106,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 108,
                        "src": "4496:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 105,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4496:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4478:25:0"
                  },
                  "src": "4449:55:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 109,
                    "nodeType": "StructuredDocumentation",
                    "src": "4510:201:0",
                    "text": "@dev    Returns the amount of funds that an account can withdraw.\n@param  _owner The address of some FDT holder.\n@return The amount funds that `_owner` can withdraw."
                  },
                  "functionSelector": "443bb293",
                  "id": 116,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawableFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 111,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 116,
                        "src": "4745:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4745:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4744:16:0"
                  },
                  "returnParameters": {
                    "id": 115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 116,
                        "src": "4784:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4784:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4783:9:0"
                  },
                  "scope": 141,
                  "src": "4716:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 117,
                    "nodeType": "StructuredDocumentation",
                    "src": "4799:82:0",
                    "text": "@dev Withdraws all available funds for the calling FDT holder."
                  },
                  "functionSelector": "24600fc3",
                  "id": 120,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 118,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4908:2:0"
                  },
                  "returnParameters": {
                    "id": 119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4919:0:0"
                  },
                  "scope": 141,
                  "src": "4886:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 121,
                    "nodeType": "StructuredDocumentation",
                    "src": "4926:205:0",
                    "text": "@dev    Returns the amount of funds that an account has withdrawn.\n@param  _owner The address of a token holder.\n@return The amount of funds that `_owner` has withdrawn."
                  },
                  "functionSelector": "0041c52c",
                  "id": 128,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawnFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 124,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 123,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 128,
                        "src": "5162:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5162:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5161:16:0"
                  },
                  "returnParameters": {
                    "id": 127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 126,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 128,
                        "src": "5201:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 125,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5201:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5200:9:0"
                  },
                  "scope": 141,
                  "src": "5136:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 129,
                    "nodeType": "StructuredDocumentation",
                    "src": "5216:422:0",
                    "text": "@dev    Returns the amount of funds that an account has earned in total. \n@dev    accumulativeFundsOf(_owner) = withdrawableFundsOf(_owner) + withdrawnFundsOf(_owner) \n= (pointsPerShare * balanceOf(_owner) + pointsCorrection[_owner]) / pointsMultiplier \n@param  _owner The address of a token holder.\n@return The amount of funds that `_owner` has earned in total."
                  },
                  "functionSelector": "4e97415f",
                  "id": 136,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 132,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 131,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5672:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5672:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5671:16:0"
                  },
                  "returnParameters": {
                    "id": 135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5711:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5711:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5710:9:0"
                  },
                  "scope": 141,
                  "src": "5643:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 137,
                    "nodeType": "StructuredDocumentation",
                    "src": "5726:368:0",
                    "text": "@dev Registers a payment of funds in tokens. \n@dev May be called directly after a deposit is made. \n@dev Calls _updateFundsTokenBalance(), whereby the contract computes the delta of the new and previous \n`fundsToken` balance and increments the total received funds (cumulative), by delta, by calling _distributeFunds()."
                  },
                  "functionSelector": "46c162de",
                  "id": 140,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateFundsReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 138,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6127:2:0"
                  },
                  "returnParameters": {
                    "id": 139,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6138:0:0"
                  },
                  "scope": 141,
                  "src": "6099:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 521,
              "src": "3214:2928:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 142,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "6458:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 143,
                  "nodeType": "InheritanceSpecifier",
                  "src": "6458:9:0"
                }
              ],
              "contractDependencies": [
                77,
                141
              ],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 161,
              "linearizedBaseContracts": [
                161,
                141,
                77
              ],
              "name": "ILoanFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 144,
                    "nodeType": "StructuredDocumentation",
                    "src": "6475:54:0",
                    "text": "@dev The `fundsToken` (dividends)."
                  },
                  "functionSelector": "63f04b15",
                  "id": 149,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 145,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6553:2:0"
                  },
                  "returnParameters": {
                    "id": 148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 147,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 149,
                        "src": "6579:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 146,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "6579:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6578:8:0"
                  },
                  "scope": 161,
                  "src": "6534:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 150,
                    "nodeType": "StructuredDocumentation",
                    "src": "6593:123:0",
                    "text": "@dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract."
                  },
                  "functionSelector": "a9691f3f",
                  "id": 155,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 151,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6747:2:0"
                  },
                  "returnParameters": {
                    "id": 154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 153,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 155,
                        "src": "6773:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 152,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6773:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6772:9:0"
                  },
                  "scope": 161,
                  "src": "6721:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 156,
                    "nodeType": "StructuredDocumentation",
                    "src": "6788:73:0",
                    "text": "@dev Withdraws all available funds for a token holder."
                  },
                  "functionSelector": "24600fc3",
                  "id": 160,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 158,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "6900:8:0"
                  },
                  "parameters": {
                    "id": 157,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6888:2:0"
                  },
                  "returnParameters": {
                    "id": 159,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6908:0:0"
                  },
                  "scope": 161,
                  "src": "6866:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 521,
              "src": "6436:476:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 162,
                    "name": "ILoanFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 161,
                    "src": "7173:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILoanFDT_$161",
                      "typeString": "contract ILoanFDT"
                    }
                  },
                  "id": 163,
                  "nodeType": "InheritanceSpecifier",
                  "src": "7173:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                161
              ],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 520,
              "linearizedBaseContracts": [
                520,
                161,
                141,
                77
              ],
              "name": "ILoan",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "ILoan.State",
                  "id": 169,
                  "members": [
                    {
                      "id": 164,
                      "name": "Ready",
                      "nodeType": "EnumValue",
                      "src": "7626:5:0"
                    },
                    {
                      "id": 165,
                      "name": "Active",
                      "nodeType": "EnumValue",
                      "src": "7633:6:0"
                    },
                    {
                      "id": 166,
                      "name": "Matured",
                      "nodeType": "EnumValue",
                      "src": "7641:7:0"
                    },
                    {
                      "id": 167,
                      "name": "Expired",
                      "nodeType": "EnumValue",
                      "src": "7650:7:0"
                    },
                    {
                      "id": 168,
                      "name": "Liquidated",
                      "nodeType": "EnumValue",
                      "src": "7659:10:0"
                    }
                  ],
                  "name": "State",
                  "nodeType": "EnumDefinition",
                  "src": "7613:58:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 170,
                    "nodeType": "StructuredDocumentation",
                    "src": "7677:196:0",
                    "text": "@dev   Emits an event indicating the Loan was funded.\n@param fundedBy     The Pool that funded the Loan.\n@param amountFunded The amount the Loan was funded for."
                  },
                  "id": 176,
                  "name": "LoanFunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 172,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "fundedBy",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 176,
                        "src": "7895:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 171,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7895:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 174,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amountFunded",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 176,
                        "src": "7921:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 173,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7921:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7894:48:0"
                  },
                  "src": "7878:65:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 177,
                    "nodeType": "StructuredDocumentation",
                    "src": "7949:262:0",
                    "text": "@dev   Emits an event indicating the balance for an account was updated.\n@param account The address of an account.\n@param token   The token address of the asset.\n@param balance The new balance of `token` for `account`."
                  },
                  "id": 185,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 184,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 179,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 185,
                        "src": "8237:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 178,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8237:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 181,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 185,
                        "src": "8262:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 180,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8262:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 183,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 185,
                        "src": "8285:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 182,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8285:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8236:65:0"
                  },
                  "src": "8216:86:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 186,
                    "nodeType": "StructuredDocumentation",
                    "src": "8308:153:0",
                    "text": "@dev   Emits an event indicating the some loaned amount was drawn down.\n@param drawdownAmount The amount that was drawn down."
                  },
                  "id": 190,
                  "name": "Drawdown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 189,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 188,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "drawdownAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 190,
                        "src": "8481:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 187,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8481:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8480:24:0"
                  },
                  "src": "8466:39:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 191,
                    "nodeType": "StructuredDocumentation",
                    "src": "8511:127:0",
                    "text": "@dev   Emits an event indicating the state of the Loan changed.\n@param state The state of the Loan."
                  },
                  "id": 195,
                  "name": "LoanStateChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 194,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 193,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 195,
                        "src": "8666:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$169",
                          "typeString": "enum ILoan.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 192,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 169,
                          "src": "8666:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$169",
                            "typeString": "enum ILoan.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8665:13:0"
                  },
                  "src": "8643:36:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 196,
                    "nodeType": "StructuredDocumentation",
                    "src": "8685:220:0",
                    "text": "@dev   Emits an event indicating the an Admin for the Loan was set.\n@param loanAdmin The address of some Loan Admin.\n@param allowed   Whether `loanAdmin` is a Loan Admin for this Loan."
                  },
                  "id": 202,
                  "name": "LoanAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 198,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loanAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 202,
                        "src": "8929:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8929:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 200,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 202,
                        "src": "8956:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8956:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8928:41:0"
                  },
                  "src": "8910:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 203,
                    "nodeType": "StructuredDocumentation",
                    "src": "8976:580:0",
                    "text": "@dev   Emits an event indicating the a payment was made for the Loan.\n@param totalPaid         The total amount paid.\n@param principalPaid     The principal portion of the amount paid.\n@param interestPaid      The interest portion of the amount paid.\n@param paymentsRemaining The amount of payment remaining.\n@param principalOwed     The outstanding principal of the Loan.\n@param nextPaymentDue    The timestamp of the due date of the next payment.\n@param latePayment       Whether this payment was late."
                  },
                  "id": 219,
                  "name": "PaymentMade",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 205,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "totalPaid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9588:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9588:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 207,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "principalPaid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9615:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 206,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9615:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 209,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "interestPaid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9646:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9646:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 211,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "paymentsRemaining",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9676:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 210,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9676:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 213,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "principalOwed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9711:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 212,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9711:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 215,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "nextPaymentDue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9742:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9742:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 217,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "latePayment",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 219,
                        "src": "9774:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9774:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9578:218:0"
                  },
                  "src": "9561:236:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 220,
                    "nodeType": "StructuredDocumentation",
                    "src": "9803:420:0",
                    "text": "@dev   Emits an event indicating the the Loan was liquidated.\n@param collateralSwapped      The amount of Collateral Asset swapped.\n@param liquidityAssetReturned The amount of Liquidity Asset recovered from swap.\n@param liquidationExcess      The amount of Liquidity Asset returned to borrower.\n@param defaultSuffered        The remaining losses after the liquidation."
                  },
                  "id": 230,
                  "name": "Liquidation",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 222,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralSwapped",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10255:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 221,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10255:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 224,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAssetReturned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10290:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 223,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10290:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 226,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidationExcess",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10330:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 225,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10330:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 228,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 230,
                        "src": "10365:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 227,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10365:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10245:149:0"
                  },
                  "src": "10228:167:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 231,
                    "nodeType": "StructuredDocumentation",
                    "src": "10401:92:0",
                    "text": "@dev The current state of this Loan, as defined in the State enum below."
                  },
                  "functionSelector": "25af34cd",
                  "id": 236,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loanState",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 232,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10516:2:0"
                  },
                  "returnParameters": {
                    "id": 235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 234,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 236,
                        "src": "10542:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$169",
                          "typeString": "enum ILoan.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 233,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 169,
                          "src": "10542:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$169",
                            "typeString": "enum ILoan.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10541:7:0"
                  },
                  "scope": 520,
                  "src": "10498:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 237,
                    "nodeType": "StructuredDocumentation",
                    "src": "10555:103:0",
                    "text": "@dev The asset deposited by Lenders into the FundingLocker, when funding this Loan."
                  },
                  "functionSelector": "209b2bca",
                  "id": 242,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 238,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10686:2:0"
                  },
                  "returnParameters": {
                    "id": 241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 240,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 242,
                        "src": "10712:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 239,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "10712:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10711:8:0"
                  },
                  "scope": 520,
                  "src": "10663:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 243,
                    "nodeType": "StructuredDocumentation",
                    "src": "10726:114:0",
                    "text": "@dev The asset deposited by Borrower into the CollateralLocker, for collateralizing this Loan."
                  },
                  "functionSelector": "aabaecd6",
                  "id": 248,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 244,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10869:2:0"
                  },
                  "returnParameters": {
                    "id": 247,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 246,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 248,
                        "src": "10895:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 245,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "10895:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10894:8:0"
                  },
                  "scope": 520,
                  "src": "10845:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 249,
                    "nodeType": "StructuredDocumentation",
                    "src": "10909:92:0",
                    "text": "@dev The FundingLocker that holds custody of Loan funds before drawdown."
                  },
                  "functionSelector": "743e5d1d",
                  "id": 254,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundingLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 250,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11028:2:0"
                  },
                  "returnParameters": {
                    "id": 253,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 252,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 254,
                        "src": "11054:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 251,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11054:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11053:9:0"
                  },
                  "scope": 520,
                  "src": "11006:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 255,
                    "nodeType": "StructuredDocumentation",
                    "src": "11069:50:0",
                    "text": "@dev The FundingLockerFactory."
                  },
                  "functionSelector": "2c3c1216",
                  "id": 260,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "flFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 256,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11142:2:0"
                  },
                  "returnParameters": {
                    "id": 259,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 258,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 260,
                        "src": "11168:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 257,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11168:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11167:9:0"
                  },
                  "scope": 520,
                  "src": "11124:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 261,
                    "nodeType": "StructuredDocumentation",
                    "src": "11183:84:0",
                    "text": "@dev The CollateralLocker that holds custody of Loan collateral."
                  },
                  "functionSelector": "09f64d08",
                  "id": 266,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 262,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11297:2:0"
                  },
                  "returnParameters": {
                    "id": 265,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 264,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 266,
                        "src": "11323:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11323:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11322:9:0"
                  },
                  "scope": 520,
                  "src": "11272:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 267,
                    "nodeType": "StructuredDocumentation",
                    "src": "11338:53:0",
                    "text": "@dev The CollateralLockerFactory."
                  },
                  "functionSelector": "e74f6166",
                  "id": 272,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "clFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 268,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11414:2:0"
                  },
                  "returnParameters": {
                    "id": 271,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 270,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 272,
                        "src": "11440:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 269,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11440:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11439:9:0"
                  },
                  "scope": 520,
                  "src": "11396:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 273,
                    "nodeType": "StructuredDocumentation",
                    "src": "11455:79:0",
                    "text": "@dev The Borrower of this Loan, responsible for repayments."
                  },
                  "functionSelector": "7df1f1b9",
                  "id": 278,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "borrower",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 274,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11556:2:0"
                  },
                  "returnParameters": {
                    "id": 277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 276,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 278,
                        "src": "11582:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 275,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11582:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11581:9:0"
                  },
                  "scope": 520,
                  "src": "11539:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 279,
                    "nodeType": "StructuredDocumentation",
                    "src": "11597:57:0",
                    "text": "@dev The RepaymentCalc for this Loan."
                  },
                  "functionSelector": "06775458",
                  "id": 284,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "repaymentCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 280,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11681:2:0"
                  },
                  "returnParameters": {
                    "id": 283,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 282,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 284,
                        "src": "11707:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 281,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11707:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11706:9:0"
                  },
                  "scope": 520,
                  "src": "11659:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 285,
                    "nodeType": "StructuredDocumentation",
                    "src": "11722:55:0",
                    "text": "@dev The LateFeeCalc for this Loan."
                  },
                  "functionSelector": "5e8bdbeb",
                  "id": 290,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lateFeeCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 286,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11802:2:0"
                  },
                  "returnParameters": {
                    "id": 289,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 288,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 290,
                        "src": "11828:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 287,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11828:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11827:9:0"
                  },
                  "scope": 520,
                  "src": "11782:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 291,
                    "nodeType": "StructuredDocumentation",
                    "src": "11843:55:0",
                    "text": "@dev The PremiumCalc for this Loan."
                  },
                  "functionSelector": "757116a0",
                  "id": 296,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "premiumCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 292,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11923:2:0"
                  },
                  "returnParameters": {
                    "id": 295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 294,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "11949:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 293,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11949:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11948:9:0"
                  },
                  "scope": 520,
                  "src": "11903:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 297,
                    "nodeType": "StructuredDocumentation",
                    "src": "11964:65:0",
                    "text": "@dev The LoanFactory that deployed this Loan."
                  },
                  "functionSelector": "0d49b38c",
                  "id": 302,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "superFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 298,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12055:2:0"
                  },
                  "returnParameters": {
                    "id": 301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 302,
                        "src": "12081:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12081:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12080:9:0"
                  },
                  "scope": 520,
                  "src": "12034:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 303,
                    "nodeType": "StructuredDocumentation",
                    "src": "12096:176:0",
                    "text": "@param  loanAdmin The address of some admin.\n@return Whether the `loanAdmin` has permission to do certain operations in case of disaster management."
                  },
                  "functionSelector": "4be7cb14",
                  "id": 310,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loanAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 305,
                        "mutability": "mutable",
                        "name": "loanAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 310,
                        "src": "12297:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 304,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12297:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12296:19:0"
                  },
                  "returnParameters": {
                    "id": 309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 308,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 310,
                        "src": "12339:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 307,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12339:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12338:6:0"
                  },
                  "scope": 520,
                  "src": "12277:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 311,
                    "nodeType": "StructuredDocumentation",
                    "src": "12351:73:0",
                    "text": "@dev The unix timestamp due date of the next payment."
                  },
                  "functionSelector": "b4198570",
                  "id": 316,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "nextPaymentDue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 312,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12452:2:0"
                  },
                  "returnParameters": {
                    "id": 315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 314,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 316,
                        "src": "12478:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 313,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12478:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12477:9:0"
                  },
                  "scope": 520,
                  "src": "12429:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 317,
                    "nodeType": "StructuredDocumentation",
                    "src": "12493:49:0",
                    "text": "@dev The APR in basis points."
                  },
                  "functionSelector": "57ded9c9",
                  "id": 322,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "apr",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 318,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12559:2:0"
                  },
                  "returnParameters": {
                    "id": 321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 320,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 322,
                        "src": "12585:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 319,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12585:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12584:9:0"
                  },
                  "scope": 520,
                  "src": "12547:47:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 323,
                    "nodeType": "StructuredDocumentation",
                    "src": "12600:70:0",
                    "text": "@dev The number of payments remaining on the Loan."
                  },
                  "functionSelector": "0895326f",
                  "id": 328,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paymentsRemaining",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 324,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12701:2:0"
                  },
                  "returnParameters": {
                    "id": 327,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 326,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 328,
                        "src": "12727:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 325,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12727:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12726:9:0"
                  },
                  "scope": 520,
                  "src": "12675:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 329,
                    "nodeType": "StructuredDocumentation",
                    "src": "12742:67:0",
                    "text": "@dev The total length of the Loan term in days."
                  },
                  "functionSelector": "469cbfdb",
                  "id": 334,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "termDays",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 330,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12831:2:0"
                  },
                  "returnParameters": {
                    "id": 333,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 332,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 334,
                        "src": "12857:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 331,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12857:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12856:9:0"
                  },
                  "scope": 520,
                  "src": "12814:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 335,
                    "nodeType": "StructuredDocumentation",
                    "src": "12872:67:0",
                    "text": "@dev The time between Loan payments in seconds."
                  },
                  "functionSelector": "f5552788",
                  "id": 340,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paymentIntervalSeconds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 336,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12975:2:0"
                  },
                  "returnParameters": {
                    "id": 339,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 338,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 340,
                        "src": "13001:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 337,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13001:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13000:9:0"
                  },
                  "scope": 520,
                  "src": "12944:66:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 341,
                    "nodeType": "StructuredDocumentation",
                    "src": "13016:61:0",
                    "text": "@dev The total requested amount for Loan."
                  },
                  "functionSelector": "f52ec46c",
                  "id": 346,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "requestAmount",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 342,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13104:2:0"
                  },
                  "returnParameters": {
                    "id": 345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 344,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 346,
                        "src": "13130:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13130:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13129:9:0"
                  },
                  "scope": 520,
                  "src": "13082:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 347,
                    "nodeType": "StructuredDocumentation",
                    "src": "13145:110:0",
                    "text": "@dev The percentage of value of the drawdown amount to post as collateral in basis points."
                  },
                  "functionSelector": "b4eae1cb",
                  "id": 352,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralRatio",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 348,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13284:2:0"
                  },
                  "returnParameters": {
                    "id": 351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 350,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 352,
                        "src": "13310:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 349,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13310:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13309:9:0"
                  },
                  "scope": 520,
                  "src": "13260:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 353,
                    "nodeType": "StructuredDocumentation",
                    "src": "13325:69:0",
                    "text": "@dev The timestamp of when Loan was instantiated."
                  },
                  "functionSelector": "cf09e0d0",
                  "id": 358,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createdAt",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 354,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13417:2:0"
                  },
                  "returnParameters": {
                    "id": 357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 356,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 358,
                        "src": "13443:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 355,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13443:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13442:9:0"
                  },
                  "scope": 520,
                  "src": "13399:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 359,
                    "nodeType": "StructuredDocumentation",
                    "src": "13458:69:0",
                    "text": "@dev The time for a Loan to be funded in seconds."
                  },
                  "functionSelector": "74d7c62b",
                  "id": 364,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 360,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13554:2:0"
                  },
                  "returnParameters": {
                    "id": 363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 362,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 364,
                        "src": "13580:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 361,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13580:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13579:9:0"
                  },
                  "scope": 520,
                  "src": "13532:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 365,
                    "nodeType": "StructuredDocumentation",
                    "src": "13595:123:0",
                    "text": "@dev The time a Borrower has, after a payment is due, to make a payment before a liquidation can occur."
                  },
                  "functionSelector": "705d5f24",
                  "id": 370,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 366,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13750:2:0"
                  },
                  "returnParameters": {
                    "id": 369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 368,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 370,
                        "src": "13776:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13776:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13775:9:0"
                  },
                  "scope": 520,
                  "src": "13723:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 371,
                    "nodeType": "StructuredDocumentation",
                    "src": "13791:86:0",
                    "text": "@dev The amount of principal owed (initially the drawdown amount)."
                  },
                  "functionSelector": "19350114",
                  "id": 376,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "principalOwed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 372,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13904:2:0"
                  },
                  "returnParameters": {
                    "id": 375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 374,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 376,
                        "src": "13930:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 373,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13930:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13929:9:0"
                  },
                  "scope": 520,
                  "src": "13882:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 377,
                    "nodeType": "StructuredDocumentation",
                    "src": "13945:113:0",
                    "text": "@dev The amount of principal that has been paid by the Borrower since the Loan instantiation."
                  },
                  "functionSelector": "64195ba8",
                  "id": 382,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "principalPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 378,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14085:2:0"
                  },
                  "returnParameters": {
                    "id": 381,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 380,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 382,
                        "src": "14111:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 379,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14111:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14110:9:0"
                  },
                  "scope": 520,
                  "src": "14063:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 383,
                    "nodeType": "StructuredDocumentation",
                    "src": "14126:112:0",
                    "text": "@dev The amount of interest that has been paid by the Borrower since the Loan instantiation."
                  },
                  "functionSelector": "e48671c4",
                  "id": 388,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 384,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14264:2:0"
                  },
                  "returnParameters": {
                    "id": 387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 386,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 388,
                        "src": "14290:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 385,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14290:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14289:9:0"
                  },
                  "scope": 520,
                  "src": "14243:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 389,
                    "nodeType": "StructuredDocumentation",
                    "src": "14305:109:0",
                    "text": "@dev The amount of fees that have been paid by the Borrower since the Loan instantiation."
                  },
                  "functionSelector": "ac7c5780",
                  "id": 394,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "feePaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 390,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14435:2:0"
                  },
                  "returnParameters": {
                    "id": 393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 394,
                        "src": "14461:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14461:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14460:9:0"
                  },
                  "scope": 520,
                  "src": "14419:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 395,
                    "nodeType": "StructuredDocumentation",
                    "src": "14476:108:0",
                    "text": "@dev The amount of excess that has been returned to the Lenders after the Loan drawdown."
                  },
                  "functionSelector": "31a7958f",
                  "id": 400,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "excessReturned",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 396,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14612:2:0"
                  },
                  "returnParameters": {
                    "id": 399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 398,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 400,
                        "src": "14638:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14638:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14637:9:0"
                  },
                  "scope": 520,
                  "src": "14589:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 401,
                    "nodeType": "StructuredDocumentation",
                    "src": "14653:95:0",
                    "text": "@dev The amount of Collateral Asset that has been liquidated after default."
                  },
                  "functionSelector": "c9f4e490",
                  "id": 406,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "amountLiquidated",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 402,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14778:2:0"
                  },
                  "returnParameters": {
                    "id": 405,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 404,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 406,
                        "src": "14804:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 403,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14804:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14803:9:0"
                  },
                  "scope": 520,
                  "src": "14753:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 407,
                    "nodeType": "StructuredDocumentation",
                    "src": "14819:93:0",
                    "text": "@dev The amount of Liquidity Asset that has been recovered after default."
                  },
                  "functionSelector": "39c02899",
                  "id": 412,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "amountRecovered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 408,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14941:2:0"
                  },
                  "returnParameters": {
                    "id": 411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 410,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 412,
                        "src": "14967:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14967:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14966:9:0"
                  },
                  "scope": 520,
                  "src": "14917:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 413,
                    "nodeType": "StructuredDocumentation",
                    "src": "14982:104:0",
                    "text": "@dev The difference between `amountRecovered` and `principalOwed` after liquidation."
                  },
                  "functionSelector": "4b27ef6c",
                  "id": 418,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultSuffered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 414,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15115:2:0"
                  },
                  "returnParameters": {
                    "id": 417,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 416,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 418,
                        "src": "15141:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 415,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15141:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15140:9:0"
                  },
                  "scope": 520,
                  "src": "15091:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 419,
                    "nodeType": "StructuredDocumentation",
                    "src": "15156:132:0",
                    "text": "@dev The amount of Liquidity Asset that is to be returned to the Borrower, if `amountRecovered > principalOwed`."
                  },
                  "functionSelector": "cee96669",
                  "id": 424,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidationExcess",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 420,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15319:2:0"
                  },
                  "returnParameters": {
                    "id": 423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 422,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 424,
                        "src": "15345:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15345:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15344:9:0"
                  },
                  "scope": 520,
                  "src": "15293:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 425,
                    "nodeType": "StructuredDocumentation",
                    "src": "15360:509:0",
                    "text": "@dev   Draws down funding from FundingLocker, posts collateral, and transitions the Loan state from `Ready` to `Active`. \n@dev   Only the Borrower can call this function. \n@dev   It emits four `BalanceUpdated` events. \n@dev   It emits a `LoanStateChanged` event. \n@dev   It emits a `Drawdown` event. \n@param amt the amount of Liquidity Asset the Borrower draws down. Remainder is returned to the Loan where it can be claimed back by LoanFDT holders."
                  },
                  "functionSelector": "a079a4dd",
                  "id": 430,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "drawdown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 428,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 427,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 430,
                        "src": "15892:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 426,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15892:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15891:13:0"
                  },
                  "returnParameters": {
                    "id": 429,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15913:0:0"
                  },
                  "scope": 520,
                  "src": "15874:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 431,
                    "nodeType": "StructuredDocumentation",
                    "src": "15920:111:0",
                    "text": "@dev Makes a payment for this Loan. \n@dev Amounts are calculated for the Borrower. "
                  },
                  "functionSelector": "d8d79700",
                  "id": 434,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "makePayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 432,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16056:2:0"
                  },
                  "returnParameters": {
                    "id": 433,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16067:0:0"
                  },
                  "scope": 520,
                  "src": "16036:32:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 435,
                    "nodeType": "StructuredDocumentation",
                    "src": "16074:154:0",
                    "text": "@dev Makes the full payment for this Loan (a.k.a. \"calling\" the Loan). \n@dev This requires the Borrower to pay a premium fee. "
                  },
                  "functionSelector": "60bd1f87",
                  "id": 438,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "makeFullPayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 436,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16257:2:0"
                  },
                  "returnParameters": {
                    "id": 437,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16268:0:0"
                  },
                  "scope": 520,
                  "src": "16233:36:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 439,
                    "nodeType": "StructuredDocumentation",
                    "src": "16279:416:0",
                    "text": "@dev   Funds this Loan and mints LoanFDTs for `mintTo` (DebtLocker in the case of Pool funding). \n@dev   Only LiquidityLocker using valid/approved Pool can call this function. \n@dev   It emits a `LoanFunded` event. \n@dev   It emits a `BalanceUpdated` event. \n@param mintTo The address that LoanFDTs are minted to.\n@param amt    The amount to fund the Loan."
                  },
                  "functionSelector": "e920b1e1",
                  "id": 446,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 441,
                        "mutability": "mutable",
                        "name": "mintTo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 446,
                        "src": "16718:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 440,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16718:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 443,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 446,
                        "src": "16734:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 442,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16734:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "16717:29:0"
                  },
                  "returnParameters": {
                    "id": 445,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16755:0:0"
                  },
                  "scope": 520,
                  "src": "16700:56:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 447,
                    "nodeType": "StructuredDocumentation",
                    "src": "16762:257:0",
                    "text": "@dev Handles returning capital to the Loan, where it can be claimed back by LoanFDT holders, \nif the Borrower has not drawn down on the Loan past the drawdown grace period. \n@dev It emits a `LoanStateChanged` event. "
                  },
                  "functionSelector": "807763ab",
                  "id": 450,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unwind",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 448,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17039:2:0"
                  },
                  "returnParameters": {
                    "id": 449,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17050:0:0"
                  },
                  "scope": 520,
                  "src": "17024:27:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 451,
                    "nodeType": "StructuredDocumentation",
                    "src": "17057:384:0",
                    "text": "@dev Triggers a default if the Loan meets certain default conditions, liquidating all collateral and updating accounting. \n@dev Only the an account with sufficient LoanFDTs of this Loan can call this function. \n@dev It emits a `BalanceUpdated` event. \n@dev It emits a `Liquidation` event. \n@dev It emits a `LoanStateChanged` event. "
                  },
                  "functionSelector": "175f8329",
                  "id": 454,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 452,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17469:2:0"
                  },
                  "returnParameters": {
                    "id": 453,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17480:0:0"
                  },
                  "scope": 520,
                  "src": "17446:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 455,
                    "nodeType": "StructuredDocumentation",
                    "src": "17487:163:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. Only the Borrower or a Loan Admin can call this function. "
                  },
                  "functionSelector": "8456cb59",
                  "id": 458,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 456,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17669:2:0"
                  },
                  "returnParameters": {
                    "id": 457,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17680:0:0"
                  },
                  "scope": 520,
                  "src": "17655:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 459,
                    "nodeType": "StructuredDocumentation",
                    "src": "17687:182:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Borrower or a Loan Admin can call this function. "
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 462,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 460,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17890:2:0"
                  },
                  "returnParameters": {
                    "id": 461,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17901:0:0"
                  },
                  "scope": 520,
                  "src": "17874:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 463,
                    "nodeType": "StructuredDocumentation",
                    "src": "17908:288:0",
                    "text": "@dev   Sets a Loan Admin. \n@dev   Only the Borrower can call this function. \n@dev   It emits a `LoanAdminSet` event. \n@param loanAdmin The address being allowed or disallowed as a Loan Admin.\n@param allowed   The atatus of a Loan Admin."
                  },
                  "functionSelector": "92769d94",
                  "id": 470,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLoanAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 465,
                        "mutability": "mutable",
                        "name": "loanAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 470,
                        "src": "18223:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 464,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18223:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 467,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 470,
                        "src": "18242:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 466,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "18242:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18222:33:0"
                  },
                  "returnParameters": {
                    "id": 469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18264:0:0"
                  },
                  "scope": 520,
                  "src": "18201:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 471,
                    "nodeType": "StructuredDocumentation",
                    "src": "18271:192:0",
                    "text": "@dev   Transfers any locked funds to the Governor. \n@dev   Only the Governor can call this function. \n@param token The address of the token to be reclaimed."
                  },
                  "functionSelector": "8905fd4f",
                  "id": 476,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 473,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 476,
                        "src": "18490:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 472,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18490:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18489:15:0"
                  },
                  "returnParameters": {
                    "id": 475,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18513:0:0"
                  },
                  "scope": 520,
                  "src": "18468:46:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    160
                  ],
                  "body": null,
                  "documentation": {
                    "id": 477,
                    "nodeType": "StructuredDocumentation",
                    "src": "18520:147:0",
                    "text": "@dev Withdraws all available funds earned through LoanFDT for a token holder. \n@dev It emits a `BalanceUpdated` event. "
                  },
                  "functionSelector": "24600fc3",
                  "id": 481,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 479,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "18706:8:0"
                  },
                  "parameters": {
                    "id": 478,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18694:2:0"
                  },
                  "returnParameters": {
                    "id": 480,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18714:0:0"
                  },
                  "scope": 520,
                  "src": "18672:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 482,
                    "nodeType": "StructuredDocumentation",
                    "src": "18721:246:0",
                    "text": "@dev    Returns the expected amount of Liquidity Asset to be recovered from a liquidation based on current oracle prices.\n@return The minimum amount of Liquidity Asset that can be expected by swapping Collateral Asset."
                  },
                  "functionSelector": "c296dcba",
                  "id": 487,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getExpectedAmountRecovered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 483,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19007:2:0"
                  },
                  "returnParameters": {
                    "id": 486,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 485,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 487,
                        "src": "19033:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 484,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19033:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19032:9:0"
                  },
                  "scope": 520,
                  "src": "18972:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 488,
                    "nodeType": "StructuredDocumentation",
                    "src": "19048:464:0",
                    "text": "@dev    Returns information of the next payment amount.\n@return The entitled interest of the next payment (Principal + Interest only when the next payment is last payment of the Loan).\n@return The entitled principal amount needed to be paid in the next payment.\n@return The entitled interest amount needed to be paid in the next payment.\n@return The payment due date.\n@return Whether the payment is late."
                  },
                  "functionSelector": "4ae01cdc",
                  "id": 501,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNextPayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 489,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19540:2:0"
                  },
                  "returnParameters": {
                    "id": 500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 491,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19566:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 490,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19566:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 493,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19575:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 492,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19575:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 495,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19584:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19584:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 497,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19593:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 496,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19593:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 499,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19602:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 498,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19602:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19565:42:0"
                  },
                  "scope": 520,
                  "src": "19517:91:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 502,
                    "nodeType": "StructuredDocumentation",
                    "src": "19614:225:0",
                    "text": "@dev    Returns the information of a full payment amount.\n@return total     Principal and interest owed, combined.\n@return principal Principal owed.\n@return interest  Interest owed."
                  },
                  "functionSelector": "77903e3b",
                  "id": 511,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getFullPayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 503,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19867:2:0"
                  },
                  "returnParameters": {
                    "id": 510,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 505,
                        "mutability": "mutable",
                        "name": "total",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 511,
                        "src": "19893:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 504,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19893:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 507,
                        "mutability": "mutable",
                        "name": "principal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 511,
                        "src": "19908:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19908:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 509,
                        "mutability": "mutable",
                        "name": "interest",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 511,
                        "src": "19927:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 508,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19927:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19892:52:0"
                  },
                  "scope": 520,
                  "src": "19844:101:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 512,
                    "nodeType": "StructuredDocumentation",
                    "src": "19951:295:0",
                    "text": "@dev    Calculates the collateral required to draw down amount.\n@param  amt The amount of the Liquidity Asset to draw down from the FundingLocker.\n@return The amount of the Collateral Asset required to post in the CollateralLocker for a given drawdown amount."
                  },
                  "functionSelector": "da9bf6e0",
                  "id": 519,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "collateralRequiredForDrawdown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 515,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 514,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 519,
                        "src": "20290:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 513,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20290:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20289:13:0"
                  },
                  "returnParameters": {
                    "id": 518,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 517,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 519,
                        "src": "20326:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 516,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20326:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20325:9:0"
                  },
                  "scope": 520,
                  "src": "20251:84:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 521,
              "src": "7154:13184:0"
            }
          ],
          "src": "120:20219:0"
        },
        "id": 0
      }
    }
  }
}
