{
  "id": "b59f8c42631bdfa87d5a140a9a37c6ab",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/pool/v1/PoolFactory.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/pool/v1/PoolFactory.sol\npragma solidity =0.6.11 >=0.6.0 <0.8.0 >=0.6.2 <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\n////// contracts/core/debt-locker/v1/interfaces/IDebtLocker.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { ILoan } from \"../../../loan/v1/interfaces/ILoan.sol\"; */\n\n/// @title DebtLocker holds custody of LoanFDT tokens.\ninterface IDebtLocker {\n\n    /**\n        @dev The Loan contract this locker is holding tokens for.\n     */\n    function loan() external view returns (ILoan);\n\n    /**\n        @dev The Liquidity Asset this locker can claim.\n     */\n    function liquidityAsset() external view returns (IERC20);\n\n    /**\n        @dev The owner of this Locker (the Pool).\n     */\n    function pool() external view returns (address);\n\n    /**\n        @dev The Loan total principal paid at last time `claim()` was called.\n     */\n    function lastPrincipalPaid() external view returns (uint256);\n\n    /**\n        @dev The Loan total interest paid at last time `claim()` was called.\n     */\n    function lastInterestPaid() external view returns (uint256);\n\n    /**\n        @dev The Loan total fees paid at last time `claim()` was called.\n     */\n    function lastFeePaid() external view returns (uint256);\n\n    /**\n        @dev The Loan total excess returned at last time `claim()` was called.\n     */\n    function lastExcessReturned() external view returns (uint256);\n\n    /**\n        @dev The Loan total default suffered at last time `claim()` was called.\n     */\n    function lastDefaultSuffered() external view returns (uint256);\n\n    /**\n        @dev Then Liquidity Asset (a.k.a. loan asset) recovered from liquidation of Loan collateral.\n     */\n    function lastAmountRecovered() external view returns (uint256);\n\n    /**\n        @dev    Claims funds distribution for Loan via LoanFDT. \n        @dev    Only the Pool can call this function. \n        @return [0] => Total Claimed.\n                [1] => Interest Claimed.\n                [2] => Principal Claimed.\n                [3] => Pool Delegate Fee Claimed.\n                [4] => Excess Returned Claimed.\n                [5] => Amount Recovered (from Liquidation).\n                [6] => Default Suffered.\n     */\n    function claim() external returns (uint256[7] memory);\n\n    /**\n        @dev Liquidates a Loan that is held by this contract. \n        @dev Only the Pool can call this function. \n     */\n    function triggerDefault() external;\n\n}\n\n////// contracts/core/subfactory/v1/interfaces/ISubFactory.sol\n/* pragma solidity 0.6.11; */\n\n/// @title SubFactory creates instances downstream of another factory.\ninterface ISubFactory {\n\n    /**\n        @dev The type of the factory\n     */\n    function factoryType() external pure returns (uint8);\n\n}\n\n////// contracts/core/debt-locker/v1/interfaces/IDebtLockerFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ISubFactory } from \"../../../subfactory/v1/interfaces/ISubFactory.sol\"; */\n\n/// @title DebtLockerFactory instantiates DebtLockers.\ninterface IDebtLockerFactory is ISubFactory {\n\n    /**\n        @dev   Emits an event indicating a DebtLocker was created.\n        @param owner      The owner of the DebtLocker.\n        @param debtLocker The address of the DebtLocker.\n        @param loan       The Loan tied to the DebtLocker.\n     */\n    event DebtLockerCreated(address indexed owner, address debtLocker, address loan);\n\n    /**\n        @param  debtLocker The address of a DebtLocker.\n        @return The address of the owner of DebtLocker at `debtLocker`.\n     */\n    function owner(address debtLocker) external view returns (address);\n\n    /**\n        @param  debtLocker Some address.\n        @return Whether `debtLocker` is a DebtLocker.\n     */\n    function isLocker(address debtLocker) external view returns (bool);\n\n    /**\n        @dev The type of the factory (i.e FactoryType::DEBT_LOCKER_FACTORY).\n     */\n    function factoryType() external override pure returns (uint8);\n\n    /**\n        @dev    Instantiates a DebtLocker. \n        @dev    It emits a `DebtLockerCreated` event. \n        @param  loan       The Loan this DebtLocker will be tied to.\n        @return debtLocker The address of the instantiated DebtLocker.\n     */\n    function newLocker(address loan) external returns (address debtLocker);\n\n}\n\n////// contracts/libraries/math/v1/SafeMathInt.sol\n/* pragma solidity 0.6.11; */\n\nlibrary SafeMathInt {\n\n    function toUint256Safe(int256 a) internal pure returns (uint256) {\n        require(a >= 0, \"SMI:NEG\");\n        return uint256(a);\n    }\n\n}\n\n////// contracts/libraries/math/v1/SafeMathUint.sol\n/* pragma solidity 0.6.11; */\n\nlibrary SafeMathUint {\n\n    function toInt256Safe(uint256 a) internal pure returns (int256 b) {\n        b = int256(a);\n        require(b >= 0, \"SMU:OOB\");\n    }\n\n}\n\n////// lib/openzeppelin-contracts/contracts/math/SafeMath.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n    /**\n     * @dev Returns the addition of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `+` operator.\n     *\n     * Requirements:\n     *\n     * - Addition cannot overflow.\n     */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a, \"SafeMath: addition overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        return sub(a, b, \"SafeMath: subtraction overflow\");\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n     * overflow (when the result is negative).\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b <= a, errorMessage);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `*` operator.\n     *\n     * Requirements:\n     *\n     * - Multiplication cannot overflow.\n     */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b, \"SafeMath: multiplication overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        return div(a, b, \"SafeMath: division by zero\");\n    }\n\n    /**\n     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b > 0, errorMessage);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        return mod(a, b, \"SafeMath: modulo by zero\");\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n     * Reverts with custom message when dividing by zero.\n     *\n     * Counterpart to Solidity's `%` operator. This function uses a `revert`\n     * opcode (which leaves remaining gas untouched) while Solidity uses an\n     * invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n        require(b != 0, errorMessage);\n        return a % b;\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/math/SignedSafeMath.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/**\n * @title SignedSafeMath\n * @dev Signed math operations with safety checks that revert on error.\n */\nlibrary SignedSafeMath {\n    int256 constant private _INT256_MIN = -2**255;\n\n    /**\n     * @dev Returns the multiplication of two signed integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `*` operator.\n     *\n     * Requirements:\n     *\n     * - Multiplication cannot overflow.\n     */\n    function mul(int256 a, int256 b) internal pure returns (int256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        require(!(a == -1 && b == _INT256_MIN), \"SignedSafeMath: multiplication overflow\");\n\n        int256 c = a * b;\n        require(c / a == b, \"SignedSafeMath: multiplication overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the integer division of two signed integers. Reverts on\n     * division by zero. The result is rounded towards zero.\n     *\n     * Counterpart to Solidity's `/` operator. Note: this function uses a\n     * `revert` opcode (which leaves remaining gas untouched) while Solidity\n     * uses an invalid opcode to revert (consuming all remaining gas).\n     *\n     * Requirements:\n     *\n     * - The divisor cannot be zero.\n     */\n    function div(int256 a, int256 b) internal pure returns (int256) {\n        require(b != 0, \"SignedSafeMath: division by zero\");\n        require(!(b == -1 && a == _INT256_MIN), \"SignedSafeMath: division overflow\");\n\n        int256 c = a / b;\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the subtraction of two signed integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `-` operator.\n     *\n     * Requirements:\n     *\n     * - Subtraction cannot overflow.\n     */\n    function sub(int256 a, int256 b) internal pure returns (int256) {\n        int256 c = a - b;\n        require((b >= 0 && c <= a) || (b < 0 && c > a), \"SignedSafeMath: subtraction overflow\");\n\n        return c;\n    }\n\n    /**\n     * @dev Returns the addition of two signed integers, reverting on\n     * overflow.\n     *\n     * Counterpart to Solidity's `+` operator.\n     *\n     * Requirements:\n     *\n     * - Addition cannot overflow.\n     */\n    function add(int256 a, int256 b) internal pure returns (int256) {\n        int256 c = a + b;\n        require((b >= 0 && c >= a) || (b < 0 && c < a), \"SignedSafeMath: addition overflow\");\n\n        return c;\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/GSN/Context.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address payable) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes memory) {\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n        return msg.data;\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/* import \"../../GSN/Context.sol\"; */\n/* import \"./IERC20.sol\"; */\n/* import \"../../math/SafeMath.sol\"; */\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n    uint8 private _decimals;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n     * a default value of 18.\n     *\n     * To select a different value for {decimals}, use {_setupDecimals}.\n     *\n     * All three of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor (string memory name_, string memory symbol_) public {\n        _name = name_;\n        _symbol = symbol_;\n        _decimals = 18;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n     * called.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `recipient` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(_msgSender(), recipient, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        _approve(_msgSender(), spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * Requirements:\n     *\n     * - `sender` and `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``sender``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(sender, recipient, amount);\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n        return true;\n    }\n\n    /**\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\n     *\n     * This is internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `sender` cannot be the zero address.\n     * - `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     */\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n        _balances[recipient] = _balances[recipient].add(amount);\n        emit Transfer(sender, recipient, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply = _totalSupply.add(amount);\n        _balances[account] = _balances[account].add(amount);\n        emit Transfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n        _totalSupply = _totalSupply.sub(amount);\n        emit Transfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Sets {decimals} to a value other than the default one of 18.\n     *\n     * WARNING: This function should only be called from the constructor. Most\n     * applications that interact with token contracts will not expect\n     * {decimals} to ever change, and may work incorrectly if it does.\n     */\n    function _setupDecimals(uint8 decimals_) internal {\n        _decimals = decimals_;\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be to transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n}\n\n////// contracts/core/funds-distribution-token/v1/BasicFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { SafeMath }       from \"../../../../lib/openzeppelin-contracts/contracts/math/SafeMath.sol\"; */\n/* import { SignedSafeMath } from \"../../../../lib/openzeppelin-contracts/contracts/math/SignedSafeMath.sol\"; */\n/* import { ERC20 }          from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\"; */\n\n/* import { SafeMathInt }  from \"../../../libraries/math/v1/SafeMathInt.sol\"; */\n/* import { SafeMathUint } from \"../../../libraries/math/v1/SafeMathUint.sol\"; */\n\n/* import { IBasicFDT } from \"./interfaces/IBasicFDT.sol\"; */\n\n/// @title BasicFDT implements the basic level FDT functionality for accounting for revenues.\nabstract contract BasicFDT is IBasicFDT, ERC20 {\n\n    using SafeMath       for uint256;\n    using SafeMathUint   for uint256;\n    using SignedSafeMath for  int256;\n    using SafeMathInt    for  int256;\n\n    uint256 internal constant pointsMultiplier = 2 ** 128;\n    uint256 internal pointsPerShare;\n\n    mapping(address => int256)  internal pointsCorrection;\n    mapping(address => uint256) internal withdrawnFunds;\n\n    constructor(string memory name, string memory symbol) ERC20(name, symbol) public { }\n\n    /**\n        @dev Distributes funds to token holders.\n        @dev It reverts if the total supply of tokens is 0.\n        @dev It emits a `FundsDistributed` event if the amount of received funds is greater than 0.\n        @dev It emits a `PointsPerShareUpdated` event if the amount of received funds is greater than 0.\n             About undistributed funds:\n                In each distribution, there is a small amount of funds which do not get distributed,\n                   which is `(value  pointsMultiplier) % totalSupply()`.\n                With a well-chosen `pointsMultiplier`, the amount funds that are not getting distributed\n                   in a distribution can be less than 1 (base unit).\n                We can actually keep track of the undistributed funds in a distribution\n                   and try to distribute it in the next distribution.\n     */\n    function _distributeFunds(uint256 value) internal {\n        require(totalSupply() > 0, \"FDT:ZERO_SUPPLY\");\n\n        if (value == 0) return;\n\n        pointsPerShare = pointsPerShare.add(value.mul(pointsMultiplier) / totalSupply());\n        emit FundsDistributed(msg.sender, value);\n        emit PointsPerShareUpdated(pointsPerShare);\n    }\n\n    /**\n        @dev    Prepares the withdrawal of funds.\n        @dev    It emits a `FundsWithdrawn` event if the amount of withdrawn funds is greater than 0.\n        @return withdrawableDividend The amount of dividend funds that can be withdrawn.\n     */\n    function _prepareWithdraw() internal returns (uint256 withdrawableDividend) {\n        withdrawableDividend       = withdrawableFundsOf(msg.sender);\n        uint256 _withdrawnFunds    = withdrawnFunds[msg.sender].add(withdrawableDividend);\n        withdrawnFunds[msg.sender] = _withdrawnFunds;\n\n        emit FundsWithdrawn(msg.sender, withdrawableDividend, _withdrawnFunds);\n    }\n\n    function withdrawableFundsOf(address _owner) public view override returns (uint256) {\n        return accumulativeFundsOf(_owner).sub(withdrawnFunds[_owner]);\n    }\n\n    function withdrawnFundsOf(address _owner) external override view returns (uint256) {\n        return withdrawnFunds[_owner];\n    }\n\n    function accumulativeFundsOf(address _owner) public override view returns (uint256) {\n        return\n            pointsPerShare\n                .mul(balanceOf(_owner))\n                .toInt256Safe()\n                .add(pointsCorrection[_owner])\n                .toUint256Safe() / pointsMultiplier;\n    }\n\n    /**\n        @dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n        @dev   It emits two `PointsCorrectionUpdated` events, one for the sender and one for the receiver.\n        @param from  The address to transfer from.\n        @param to    The address to transfer to.\n        @param value The amount to be transferred.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 value\n    ) internal virtual override {\n        super._transfer(from, to, value);\n\n        int256 _magCorrection       = pointsPerShare.mul(value).toInt256Safe();\n        int256 pointsCorrectionFrom = pointsCorrection[from].add(_magCorrection);\n        pointsCorrection[from]      = pointsCorrectionFrom;\n        int256 pointsCorrectionTo   = pointsCorrection[to].sub(_magCorrection);\n        pointsCorrection[to]        = pointsCorrectionTo;\n\n        emit PointsCorrectionUpdated(from, pointsCorrectionFrom);\n        emit PointsCorrectionUpdated(to,   pointsCorrectionTo);\n    }\n\n    /**\n        @dev   Mints tokens to an account. Updates pointsCorrection to keep funds unchanged.\n        @param account The account that will receive the created tokens.\n        @param value   The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal virtual override {\n        super._mint(account, value);\n\n        int256 _pointsCorrection = pointsCorrection[account].sub(\n            (pointsPerShare.mul(value)).toInt256Safe()\n        );\n\n        pointsCorrection[account] = _pointsCorrection;\n\n        emit PointsCorrectionUpdated(account, _pointsCorrection);\n    }\n\n    /**\n        @dev   Burns an amount of the token of a given account. Updates pointsCorrection to keep funds unchanged.\n        @dev   It emits a `PointsCorrectionUpdated` event.\n        @param account The account whose tokens will be burnt.\n        @param value   The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal virtual override {\n        super._burn(account, value);\n\n        int256 _pointsCorrection = pointsCorrection[account].add(\n            (pointsPerShare.mul(value)).toInt256Safe()\n        );\n\n        pointsCorrection[account] = _pointsCorrection;\n\n        emit PointsCorrectionUpdated(account, _pointsCorrection);\n    }\n\n    function withdrawFunds() public virtual override {}\n\n    /**\n        @dev    Updates the current `fundsToken` balance and returns the difference of the new and previous `fundsToken` balance.\n        @return A int256 representing the difference of the new and previous `fundsToken` balance.\n     */\n    function _updateFundsTokenBalance() internal virtual returns (int256) {}\n\n    function updateFundsReceived() public override virtual {\n        int256 newFunds = _updateFundsTokenBalance();\n\n        if (newFunds <= 0) return;\n\n        _distributeFunds(newFunds.toUint256Safe());\n    }\n\n}\n\n////// contracts/core/funds-distribution-token/v1/interfaces/IExtendedFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IBasicFDT } from \"./IBasicFDT.sol\"; */\n\n/// @title ExtendedFDT implements the FDT functionality for accounting for losses.\ninterface IExtendedFDT is IBasicFDT {\n\n    /**\n        @dev This event emits when the internal `lossesPerShare` is updated.\n        @dev First, and only, parameter is the new value of the internal `lossesPerShare`.\n     */\n    event LossesPerShareUpdated(uint256);\n\n    /**\n        @dev This event emits when an account's `lossesCorrection` is updated.\n        @dev First parameter is the address of some account.\n        @dev Second parameter is the new value of the account's `lossesCorrection`.\n     */\n    event LossesCorrectionUpdated(address indexed, int256);\n\n    /**\n        @dev This event emits when new losses are distributed.\n        @dev First parameter is the address of the account that has distributed losses.\n        @dev Second parameter is the amount of losses received for distribution.\n     */\n    event LossesDistributed(address indexed, uint256);\n\n    /**\n        @dev   This event emits when distributed losses are recognized by a token holder.\n        @dev First parameter is the address of the receiver of losses.\n        @dev Second parameter is the amount of losses that were recognized.\n        @dev Third parameter is the total amount of losses that are recognized.\n     */\n    event LossesRecognized(address indexed, uint256, uint256);\n\n    /**\n        @dev    Returns the amount of losses that an account can withdraw.\n        @param  _owner The address of a token holder.\n        @return The amount of losses that `_owner` can withdraw.\n     */\n    function recognizableLossesOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev    Returns the amount of losses that an account has recognized.\n        @param  _owner The address of a token holder.\n        @return The amount of losses that `_owner` has recognized.\n     */\n    function recognizedLossesOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev    Returns the amount of losses that an account has earned in total. \n        @dev    accumulativeLossesOf(_owner) = recognizableLossesOf(_owner) + recognizedLossesOf(_owner) \n                = (lossesPerShare * balanceOf(_owner) + lossesCorrection[_owner]) / pointsMultiplier \n        @param  _owner The address of a token holder.\n        @return The amount of losses that `_owner` has earned in total.\n     */\n    function accumulativeLossesOf(address _owner) external view returns (uint256);\n\n    /**\n        @dev Registers a loss. \n        @dev May be called directly after a shortfall after BPT burning occurs. \n        @dev Calls _updateLossesTokenBalance(), whereby the contract computes the delta of the new and previous \n             losses balance and increments the total losses (cumulative), by delta, by calling _distributeLosses(). \n     */\n    function updateLossesReceived() external;\n\n}\n\n////// contracts/core/funds-distribution-token/v1/ExtendedFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IExtendedFDT } from \"./interfaces/IExtendedFDT.sol\"; */\n\n/* import { BasicFDT, SafeMath, SafeMathInt, SafeMathUint, SignedSafeMath } from \"./BasicFDT.sol\"; */\n\n/// @title ExtendedFDT implements the FDT functionality for accounting for losses.\nabstract contract ExtendedFDT is IExtendedFDT, BasicFDT {\n\n    using SafeMath       for uint256;\n    using SafeMathUint   for uint256;\n    using SignedSafeMath for  int256;\n    using SafeMathInt    for  int256;\n\n    uint256 internal lossesPerShare;\n\n    mapping(address => int256)  internal lossesCorrection;\n    mapping(address => uint256) internal recognizedLosses;\n\n    constructor(string memory name, string memory symbol) BasicFDT(name, symbol) public { }\n\n    /**\n        @dev Distributes losses to token holders.\n        @dev It reverts if the total supply of tokens is 0.\n        @dev It emits a `LossesDistributed` event if the amount of received losses is greater than 0.\n        @dev It emits a `LossesPerShareUpdated` event if the amount of received losses is greater than 0.\n             About undistributed losses:\n                In each distribution, there is a small amount of losses which do not get distributed,\n                which is `(value * pointsMultiplier) % totalSupply()`.\n             With a well-chosen `pointsMultiplier`, the amount losses that are not getting distributed\n                in a distribution can be less than 1 (base unit).\n             We can actually keep track of the undistributed losses in a distribution\n                and try to distribute it in the next distribution.\n     */\n    function _distributeLosses(uint256 value) internal {\n        require(totalSupply() > 0, \"FDT:ZERO_SUPPLY\");\n\n        if (value == 0) return;\n\n        uint256 _lossesPerShare = lossesPerShare.add(value.mul(pointsMultiplier) / totalSupply());\n        lossesPerShare          = _lossesPerShare;\n\n        emit LossesDistributed(msg.sender, value);\n        emit LossesPerShareUpdated(_lossesPerShare);\n    }\n\n    /**\n        @dev    Prepares losses for a withdrawal.\n        @dev    It emits a `LossesWithdrawn` event if the amount of withdrawn losses is greater than 0.\n        @return recognizableDividend The amount of dividend losses that can be recognized.\n     */\n    function _prepareLossesWithdraw() internal returns (uint256 recognizableDividend) {\n        recognizableDividend = recognizableLossesOf(msg.sender);\n\n        uint256 _recognizedLosses    = recognizedLosses[msg.sender].add(recognizableDividend);\n        recognizedLosses[msg.sender] = _recognizedLosses;\n\n        emit LossesRecognized(msg.sender, recognizableDividend, _recognizedLosses);\n    }\n\n    function recognizableLossesOf(address _owner) public override view returns (uint256) {\n        return accumulativeLossesOf(_owner).sub(recognizedLosses[_owner]);\n    }\n\n    function recognizedLossesOf(address _owner) external override view returns (uint256) {\n        return recognizedLosses[_owner];\n    }\n\n    function accumulativeLossesOf(address _owner) public override view returns (uint256) {\n        return\n            lossesPerShare\n                .mul(balanceOf(_owner))\n                .toInt256Safe()\n                .add(lossesCorrection[_owner])\n                .toUint256Safe() / pointsMultiplier;\n    }\n\n    /**\n        @dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n        @dev         It emits two `LossesCorrectionUpdated` events, one for the sender and one for the receiver.\n        @param from  The address to transfer from.\n        @param to    The address to transfer to.\n        @param value The amount to be transferred.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 value\n    ) internal virtual override {\n        super._transfer(from, to, value);\n\n        int256 _lossesCorrection    = lossesPerShare.mul(value).toInt256Safe();\n        int256 lossesCorrectionFrom = lossesCorrection[from].add(_lossesCorrection);\n        lossesCorrection[from]      = lossesCorrectionFrom;\n        int256 lossesCorrectionTo   = lossesCorrection[to].sub(_lossesCorrection);\n        lossesCorrection[to]        = lossesCorrectionTo;\n\n        emit LossesCorrectionUpdated(from, lossesCorrectionFrom);\n        emit LossesCorrectionUpdated(to,   lossesCorrectionTo);\n    }\n\n    /**\n        @dev   Mints tokens to an account. Updates lossesCorrection to keep losses unchanged.\n        @dev   It emits a `LossesCorrectionUpdated` event.\n        @param account The account that will receive the created tokens.\n        @param value   The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal virtual override {\n        super._mint(account, value);\n\n        int256 _lossesCorrection = lossesCorrection[account].sub(\n            (lossesPerShare.mul(value)).toInt256Safe()\n        );\n\n        lossesCorrection[account] = _lossesCorrection;\n\n        emit LossesCorrectionUpdated(account, _lossesCorrection);\n    }\n\n    /**\n        @dev   Burns an amount of the token of a given account. Updates lossesCorrection to keep losses unchanged.\n        @dev   It emits a `LossesCorrectionUpdated` event.\n        @param account The account from which tokens will be burnt.\n        @param value   The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal virtual override {\n        super._burn(account, value);\n\n        int256 _lossesCorrection = lossesCorrection[account].add(\n            (lossesPerShare.mul(value)).toInt256Safe()\n        );\n\n        lossesCorrection[account] = _lossesCorrection;\n\n        emit LossesCorrectionUpdated(account, _lossesCorrection);\n    }\n\n    function updateLossesReceived() public override virtual {\n        int256 newLosses = _updateLossesBalance();\n\n        if (newLosses <= 0) return;\n\n        _distributeLosses(newLosses.toUint256Safe());\n    }\n\n    /**\n        @dev Recognizes all recognizable losses for an account using loss accounting.\n     */\n    function _recognizeLosses() internal virtual returns (uint256 losses) { }\n\n    /**\n        @dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n        @return A int256 representing the difference of the new and previous losses balance.\n     */\n    function _updateLossesBalance() internal virtual returns (int256) { }\n\n}\n\n////// contracts/core/globals/v1/interfaces/IMapleGlobals.sol\n/* pragma solidity 0.6.11; */\n\n/// @title MapleGlobals maintains a central source of parameters and allowlists for the Maple protocol.\ninterface IMapleGlobals {\n\n    /**\n        @dev   Emits an event indicating the MapleGlobals contract was created.\n     */\n    event Initialized();\n\n    /**\n        @dev   Emits an event indicating the validity of a Collateral Asset was set.\n        @param asset    The Collateral Asset to assign validity to.\n        @param decimals The number of decimal places of `asset`.\n        @param symbol   The symbol of `asset`.\n        @param valid    The new validity status of `asset`.\n     */\n    event CollateralAssetSet(address asset, uint256 decimals, string symbol, bool valid);\n\n    /**\n        @dev   Emits an event indicating the validity of a Liquidity Asset was set.\n        @param asset    The Liquidity Asset to assign validity to.\n        @param decimals The number of decimal places of `asset`.\n        @param symbol   The symbol of `asset`.\n        @param valid    The new validity status of `asset`.\n     */\n    event LiquidityAssetSet(address asset, uint256 decimals, string symbol, bool valid);\n\n    /**\n        @dev   Emits an event indicating the Oracle for an asset was set.\n        @param asset  The asset to update price for.\n        @param oracle The new Oracle to use.\n     */\n    event OracleSet(address asset, address oracle);\n\n    /**\n        @dev This is unused.\n     */\n    event TransferRestrictionExemptionSet(address indexed exemptedContract, bool valid);\n\n    /**\n        @dev   Emits an event indicating the validity of a Balancer Pool was set.\n        @param balancerPool The address of Balancer Pool contract.\n        @param valid        The new validity status of a Balancer Pool.\n     */\n    event BalancerPoolSet(address balancerPool, bool valid);\n\n    /**\n        @dev   Emits an event indicating a PendingGovernor was set.\n        @param pendingGovernor The address of the new Pending Governor.\n     */\n    event PendingGovernorSet(address indexed pendingGovernor);\n\n    /**\n        @dev   Emits an event indicating Governorship was accepted by a new account.\n        @param governor The account that has accepted Governorship.\n     */\n    event GovernorAccepted(address indexed governor);\n\n    /**\n        @dev   Emits an event indicating that some Governor controlled parameter was set.\n        @param which The identifier of the parameter that was set.\n        @param value The value the parameter was set to.\n     */\n    event GlobalsParamSet(bytes32 indexed which, uint256 value);\n\n    /**\n        @dev   Emits an event indicating that some Governor controlled address was set.\n        @param which The identifier of the address that was set.\n        @param addr  The address that was set.\n     */\n    event GlobalsAddressSet(bytes32 indexed which, address addr);\n\n    /**\n        @dev   Emits an event indicating the protocol's paused state has been set.\n        @param pause Whether the protocol was paused.\n     */\n    event ProtocolPaused(bool pause);\n\n    /**\n        @dev   Emits an event indicating the GlobalAdmin was set.\n        @param newGlobalAdmin The address of the new GlobalAdmin.\n     */\n    event GlobalAdminSet(address indexed newGlobalAdmin);\n\n    /**\n        @dev   Emits an event indicating the validity of a Pool Delegate was set.\n        @param poolDelegate The address of a Pool Delegate.\n        @param valid        Whether `poolDelegate` is a valid Pool Delegate.\n     */\n    event PoolDelegateSet(address indexed poolDelegate, bool valid);\n\n    /**\n        @dev The ERC-2222 Maple Token for the Maple protocol.\n     */\n    function mpl() external pure returns (address);\n\n    /**\n        @dev The Governor that is declared for governorship transfer. \n        @dev Must be accepted for transfer to take effect. \n     */\n    function pendingGovernor() external view returns (address);\n\n    /**\n        @dev The Governor responsible for management of global Maple variables.\n     */\n    function governor() external view returns (address);\n\n    /**\n        @dev The MapleTreasury is the Treasury where all fees pass through for conversion, prior to distribution.\n     */\n    function mapleTreasury() external view returns (address);\n\n    /**\n        @dev The Global Admin of the whole network. \n        @dev Has the power to switch off/on the functionality of entire protocol. \n     */\n    function globalAdmin() external view returns (address);\n\n    /**\n        @dev The amount of time a Borrower has to make a missed payment before a default can be triggered. \n     */\n    function defaultGracePeriod() external view returns (uint256);\n\n    /**\n        @dev The minimum amount of Pool cover that a Pool Delegate has to provide before they can finalize a Pool.\n     */\n    function swapOutRequired() external view returns (uint256);\n\n    /**\n        @dev The amount of time to allow a Borrower to drawdown on their Loan after funding period ends.\n     */\n    function fundingPeriod() external view returns (uint256);\n\n    /**\n        @dev The portion of drawdown that goes to the Pool Delegates and individual Lenders.\n     */\n    function investorFee() external view returns (uint256);\n\n    /**\n        @dev The portion of drawdown that goes to the MapleTreasury.\n     */\n    function treasuryFee() external view returns (uint256);\n\n    /**\n        @dev The maximum amount of slippage for Uniswap transactions.\n     */\n    function maxSwapSlippage() external view returns (uint256);\n\n    /**\n        @dev The minimum amount of LoanFDTs required to trigger liquidations (basis points percentage of totalSupply).\n     */\n    function minLoanEquity() external view returns (uint256);\n\n    /**\n        @dev The period (in secs) after which Stakers are allowed to unstake their BPTs from a StakeLocker.\n     */\n    function stakerCooldownPeriod() external view returns (uint256);\n\n    /**\n        @dev The period (in secs) after which LPs are allowed to withdraw their funds from a Pool.\n     */\n    function lpCooldownPeriod() external view returns (uint256);\n\n    /**\n        @dev The window of time (in secs) after `stakerCooldownPeriod` that an account has to withdraw before their intent to unstake is invalidated.\n     */\n    function stakerUnstakeWindow() external view returns (uint256);\n\n    /**\n        @dev The window of time (in secs) after `lpCooldownPeriod` that an account has to withdraw before their intent to withdraw is invalidated.\n     */\n    function lpWithdrawWindow() external view returns (uint256);\n\n    /**\n        @dev Whether the functionality of the entire protocol is paused.\n     */\n    function protocolPaused() external view returns (bool);\n\n    /**\n        @param  liquidityAsset The address of a Liquidity Asset.\n        @return Whether `liquidityAsset` is valid.\n     */\n    function isValidLiquidityAsset(address liquidityAsset) external view returns (bool);\n\n    /**\n        @param  collateralAsset The address of a Collateral Asset.\n        @return Whether `collateralAsset` is valid.\n     */\n    function isValidCollateralAsset(address collateralAsset) external view returns (bool);\n\n    /**\n        @param  calc The address of a Calculator.\n        @return Whether `calc` is valid.\n     */\n    function validCalcs(address calc) external view returns (bool);\n\n    /**\n        @dev    Prevents unauthorized/unknown addresses from creating Pools.\n        @param  poolDelegate The address of a Pool Delegate.\n        @return Whether `poolDelegate` is valid.\n     */\n    function isValidPoolDelegate(address poolDelegate) external view returns (bool);\n\n    /**\n        @param  balancerPool The address of a Balancer Pool.\n        @return Whether Maple has approved `balancerPool` for BPT staking.\n     */\n    function isValidBalancerPool(address balancerPool) external view returns (bool);\n\n    /**\n        @dev Determines the liquidation path of various assets in Loans and the Treasury. \n        @dev The value provided will determine whether or not to perform a bilateral or triangular swap on Uniswap. \n        @dev For example, `defaultUniswapPath[WBTC][USDC]` value would indicate what asset to convert WBTC into before conversion to USDC. \n        @dev If `defaultUniswapPath[WBTC][USDC] == USDC`, then the swap is bilateral and no middle asset is swapped. \n        @dev If `defaultUniswapPath[WBTC][USDC] == WETH`, then swap WBTC for WETH, then WETH for USDC. \n        @param  tokenA The address of the asset being swapped.\n        @param  tokenB The address of the final asset to receive.\n        @return The intermediary asset for swaps, if any.\n     */\n    function defaultUniswapPath(address tokenA, address tokenB) external view returns (address);\n\n    /**\n        @param  asset The address of some token.\n        @return The Chainlink Oracle for the price of `asset`.\n     */\n    function oracleFor(address asset) external view returns (address);\n    \n    /**\n        @param  poolFactory The address of a Pool Factory.\n        @return Whether `poolFactory` is valid.\n     */\n    function isValidPoolFactory(address poolFactory) external view returns (bool);\n\n    /**\n        @param  loanFactory The address of a Loan Factory.\n        @return Whether `loanFactory` is valid.\n     */\n    function isValidLoanFactory(address loanFactory) external view returns (bool);\n    \n    /**\n        @param  superFactory The core factory (e.g. PoolFactory, LoanFactory).\n        @param  subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n        @return Whether `subFactory` is valid as it relates to `superFactory`.\n     */\n    function validSubFactories(address superFactory, address subFactory) external view returns (bool);\n    \n    /**\n        @dev   Sets the Staker cooldown period. \n        @dev   This change will affect the existing cool down period for the Stakers that already intended to unstake. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newCooldownPeriod The new value for the cool down period.\n     */\n    function setStakerCooldownPeriod(uint256 newCooldownPeriod) external;\n\n    /**\n        @dev   Sets the Liquidity Pool cooldown period. \n        @dev   This change will affect the existing cool down period for the LPs that already intended to withdraw. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newCooldownPeriod The new value for the cool down period.\n     */\n    function setLpCooldownPeriod(uint256 newCooldownPeriod) external;\n\n    /**\n        @dev   Sets the Staker unstake window. \n        @dev   This change will affect the existing window for the Stakers that already intended to unstake. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newUnstakeWindow The new value for the unstake window.\n     */\n    function setStakerUnstakeWindow(uint256 newUnstakeWindow) external;\n\n    /**\n        @dev   Sets the Liquidity Pool withdraw window. \n        @dev   This change will affect the existing window for the LPs that already intended to withdraw. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newLpWithdrawWindow The new value for the withdraw window.\n     */\n    function setLpWithdrawWindow(uint256 newLpWithdrawWindow) external;\n\n    /**\n        @dev   Sets the allowed Uniswap slippage percentage, in basis points. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param newMaxSlippage The new max slippage percentage (in basis points)\n     */\n    function setMaxSwapSlippage(uint256 newMaxSlippage) external;\n\n    /**\n      @dev   Sets the Global Admin. \n      @dev   Only the Governor can call this function. \n      @dev   It emits a `GlobalAdminSet` event. \n      @param newGlobalAdmin The new global admin address.\n     */\n    function setGlobalAdmin(address newGlobalAdmin) external;\n\n    /**\n        @dev   Sets the validity of a Balancer Pool. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `BalancerPoolSet` event. \n        @param balancerPool The address of Balancer Pool contract.\n        @param valid        The new validity status of a Balancer Pool.\n     */\n    function setValidBalancerPool(address balancerPool, bool valid) external;\n\n    /**\n        @dev   Sets the paused/unpaused state of the protocol. \n        @dev   Only the Global Admin can call this function. \n        @dev   It emits a `ProtocolPaused` event. \n        @param pause A boolean flag to switch externally facing functionality in the protocol on/off.\n     */\n    function setProtocolPause(bool pause) external;\n\n    /**\n        @dev   Sets the validity of a PoolFactory. \n        @dev   Only the Governor can call this function. \n        @param poolFactory The address of a PoolFactory.\n        @param valid       The new validity status of `poolFactory`.\n     */\n    function setValidPoolFactory(address poolFactory, bool valid) external;\n\n    /**\n        @dev   Sets the validity of a LoanFactory. \n        @dev   Only the Governor can call this function. \n        @param loanFactory The address of a LoanFactory.\n        @param valid       The new validity status of `loanFactory`.\n     */\n    function setValidLoanFactory(address loanFactory, bool valid) external;\n\n    /**\n        @dev   Sets the validity of `subFactory` as it relates to `superFactory`. \n        @dev   Only the Governor can call this function. \n        @param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n        @param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n        @param valid        The new validity status of `subFactory` within context of `superFactory`.\n     */\n    function setValidSubFactory(address superFactory, address subFactory, bool valid) external;\n\n    /**\n        @dev   Sets the path to swap an asset through Uniswap. \n        @dev   Only the Governor can call this function. \n        @dev   Set to == mid to enable a bilateral swap (single path swap). \n        @dev   Set to != mid to enable a triangular swap (multi path swap). \n        @param from The address of the asset being swapped.\n        @param to   The address of the final asset to receive.\n        @param mid  The intermediary asset for swaps, if any.\n     */\n    function setDefaultUniswapPath(address from, address to, address mid) external;\n\n    /**\n        @dev   Sets the validity of a Pool Delegate (those allowed to create Pools). \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `PoolDelegateSet` event. \n        @param poolDelegate The address to manage permissions for.\n        @param valid        The new validity status of a Pool Delegate.\n     */\n    function setPoolDelegateAllowlist(address poolDelegate, bool valid) external;\n\n    /**\n        @dev   Sets the validity of an asset for collateral. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `CollateralAssetSet` event. \n        @param asset The asset to assign validity to.\n        @param valid The new validity status of a Collateral Asset.\n     */\n    function setCollateralAsset(address asset, bool valid) external;\n\n    /**\n        @dev   Sets the validity of an asset for liquidity in Pools. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `LiquidityAssetSet` event. \n        @param asset The asset to assign validity to.\n        @param valid The new validity status a Liquidity Asset in Pools.\n     */\n    function setLiquidityAsset(address asset, bool valid) external;\n\n    /**\n        @dev   Sets the validity of a calculator contract. \n        @dev   Only the Governor can call this function. \n        @param calc  The Calculator address.\n        @param valid The new validity status of a Calculator.\n     */\n    function setCalc(address calc, bool valid) external;\n\n    /**\n        @dev   Sets the investor fee (in basis points). \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _fee The fee, e.g., 50 = 0.50%.\n     */\n    function setInvestorFee(uint256 _fee) external;\n\n    /**\n        @dev   Sets the treasury fee (in basis points). \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _fee The fee, e.g., 50 = 0.50%.\n     */\n    function setTreasuryFee(uint256 _fee) external;\n\n    /**\n        @dev   Sets the MapleTreasury. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _mapleTreasury A new MapleTreasury address.\n     */\n    function setMapleTreasury(address _mapleTreasury) external;\n\n    /**\n        @dev   Sets the default grace period. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _defaultGracePeriod The new number of seconds to set the grace period to.\n     */\n    function setDefaultGracePeriod(uint256 _defaultGracePeriod) external;\n\n    /**\n        @dev   Sets the minimum Loan equity. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _minLoanEquity The new minimum percentage of Loan equity an account must have to trigger liquidations.\n     */\n    function setMinLoanEquity(uint256 _minLoanEquity) external;\n\n    /**\n        @dev   Sets the funding period. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param _fundingPeriod The number of seconds to set the drawdown grace period to.\n     */\n    function setFundingPeriod(uint256 _fundingPeriod) external;\n\n    /**\n        @dev   Sets the the minimum Pool cover required to finalize a Pool. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `GlobalsParamSet` event. \n        @param amt The new minimum swap out required.\n     */\n    function setSwapOutRequired(uint256 amt) external;\n\n    /**\n        @dev   Sets a price feed's oracle. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `OracleSet` event. \n        @param asset  The asset to update price for.\n        @param oracle The new Oracle to use for the price of `asset`.\n     */\n    function setPriceOracle(address asset, address oracle) external;\n\n    /**\n        @dev   Sets a new Pending Governor. \n        @dev   This address can become Governor if they accept. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `PendingGovernorSet` event. \n        @param _pendingGovernor The address of a new Pending Governor.\n     */\n    function setPendingGovernor(address _pendingGovernor) external;\n\n    /**\n        @dev Accept the Governor position. \n        @dev Only the Pending Governor can call this function. \n        @dev It emits a `GovernorAccepted` event. \n     */\n    function acceptGovernor() external;\n\n    /**\n        @dev    Fetch price for asset from Chainlink oracles.\n        @param  asset The asset to fetch the price of.\n        @return The price of asset in USD.\n     */\n    function getLatestPrice(address asset) external view returns (uint256);\n\n    /**\n        @dev   Checks that a `subFactory` is valid as it relates to `superFactory`.\n        @param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n        @param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n        @param factoryType  The type expected for the subFactory. \n                                0 = COLLATERAL_LOCKER_FACTORY, \n                                1 = DEBT_LOCKER_FACTORY, \n                                2 = FUNDING_LOCKER_FACTORY, \n                                3 = LIQUIDITY_LOCKER_FACTORY, \n                                4 = STAKE_LOCKER_FACTORY. \n     */\n    function isValidSubFactory(address superFactory, address subFactory, uint8 factoryType) external view returns (bool);\n\n    /**\n        @dev   Checks that a Calculator is valid.\n        @param calc     The Calculator address.\n        @param calcType The Calculator type.\n     */\n    function isValidCalc(address calc, uint8 calcType) external view returns (bool);\n\n    /**\n        @dev    Returns the `lpCooldownPeriod` and `lpWithdrawWindow` as a tuple, for convenience.\n        @return The value of `lpCooldownPeriod`.\n        @return The value of `lpWithdrawWindow`.\n     */\n    function getLpCooldownParams() external view returns (uint256, uint256);\n\n}\n\n////// contracts/core/liquidity-locker/v1/interfaces/ILiquidityLocker.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/// @title LiquidityLocker holds custody of Liquidity Asset tokens for a given Pool.\ninterface ILiquidityLocker {\n\n    /**\n        @dev The Pool contract address that owns this LiquidityLocker.\n     */\n    function pool() external view returns (address);\n\n    /**\n        @dev The Liquidity Asset which this LiquidityLocker will escrow.\n     */\n    function liquidityAsset() external view returns (IERC20);\n\n    /**\n        @dev   Transfers amount of Liquidity Asset to a destination account. \n        @dev   Only the Pool can call this function. \n        @param dst The destination to transfer Liquidity Asset to.\n        @param amt The amount of Liquidity Asset to transfer.\n     */\n    function transfer(address dst, uint256 amt) external;\n\n    /**\n        @dev   Funds a Loan using available assets in this LiquidityLocker. \n        @dev   Only the Pool can call this function. \n        @param loan       The Loan to fund.\n        @param debtLocker The DebtLocker that will escrow debt tokens.\n        @param amount     The amount of Liquidity Asset to fund the Loan for.\n     */\n    function fundLoan(address loan, address debtLocker, uint256 amount) external;\n\n}\n\n////// contracts/core/liquidity-locker/v1/interfaces/ILiquidityLockerFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ISubFactory } from  \"../../../subfactory/v1/interfaces/ISubFactory.sol\"; */\n\n/// @title LiquidityLockerFactory instantiates LiquidityLockers.\ninterface ILiquidityLockerFactory is ISubFactory {\n\n    /**\n        @dev   Emits an event indicating a LiquidityLocker was created.\n        @param owner           The owner of the LiquidityLocker.\n        @param liquidityLocker The address of the LiquidityLocker.\n        @param liquidityAsset  The Liquidity Asset of the LiquidityLocker.\n     */\n    event LiquidityLockerCreated(address indexed owner, address liquidityLocker, address liquidityAsset);\n\n    /**\n        @param  liquidityLocker The address of a LiquidityLocker.\n        @return The address of the owner of LiquidityLocker at `liquidityLocker`.\n     */\n    function owner(address liquidityLocker) external view returns (address);\n\n    /**\n        @param  liquidityLocker The address of a LiquidityLocker.\n        @return The address of the owner of LiquidityLocker at `liquidityLocker`.\n     */\n    function isLocker(address liquidityLocker) external view returns (bool);\n\n    /**\n        @dev The type of the factory (i.e FactoryType::LIQUIDITY_LOCKER_FACTORY).\n     */\n    function factoryType() external override pure returns (uint8);\n\n    /**\n        @dev    Instantiates a LiquidityLocker contract.\n        @dev    It emits a `LiquidityLockerCreated` event.\n        @param  liquidityAsset  The Liquidity Asset this LiquidityLocker will escrow.\n        @return liquidityLocker The address of the instantiated LiquidityLocker.\n     */\n    function newLocker(address liquidityAsset) external returns (address liquidityLocker);\n\n}\n\n////// contracts/core/loan/v1/interfaces/ILoanFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IMapleGlobals } from \"../../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n\n/// @title LoanFactory instantiates Loans.\ninterface ILoanFactory {\n\n    /**\n        @dev   Emits an event indicating a LoanFactoryAdmin was allowed.\n        @param loanFactoryAdmin The address of a LoanFactoryAdmin.\n        @param allowed          Whether `loanFactoryAdmin` is allowed as an admin of the LoanFactory.\n     */\n    event LoanFactoryAdminSet(address indexed loanFactoryAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating a Loan was created.\n        @param loan             The address of the Loan.\n        @param borrower         The Borrower.\n        @param liquidityAsset   The asset the Loan will raise funding in.\n        @param collateralAsset  The asset the Loan will use as collateral.\n        @param collateralLocker The address of the Collateral Locker.\n        @param fundingLocker    The address of the Funding Locker.\n        @param specs            The specifications for the Loan. \n                                    [0] => apr, \n                                    [1] => termDays, \n                                    [2] => paymentIntervalDays, \n                                    [3] => requestAmount, \n                                    [4] => collateralRatio. \n        @param calcs            The calculators used for the Loan. \n                                    [0] => repaymentCalc, \n                                    [1] => lateFeeCalc, \n                                    [2] => premiumCalc. \n        @param name             The name of the Loan FDTs.\n        @param symbol           The symbol of the Loan FDTs.\n     */\n    event LoanCreated(\n        address loan,\n        address indexed borrower,\n        address indexed liquidityAsset,\n        address collateralAsset,\n        address collateralLocker,\n        address fundingLocker,\n        uint256[5] specs,\n        address[3] calcs,\n        string name,\n        string symbol\n    );\n\n    /**\n        @dev The Factory type of `CollateralLockerFactory`.\n     */\n    function CL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The Factory type of `FundingLockerFactory`.\n     */\n    function FL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The Calc type of `RepaymentCalc`.\n     */\n    function INTEREST_CALC_TYPE() external view returns (uint8);\n\n    /**\n        @dev The Calc type of `LateFeeCalc`.\n     */\n    function LATEFEE_CALC_TYPE() external view returns (uint8);\n\n    /**\n        @dev The Calc type of `PremiumCalc`.\n     */\n    function PREMIUM_CALC_TYPE() external view returns (uint8);\n\n    /**\n        @dev The instance of the MapleGlobals.\n     */\n    function globals() external view returns (IMapleGlobals);\n\n    /**\n        @dev The incrementor for number of Loans created.\n     */\n    function loansCreated() external view returns (uint256);\n\n    /**\n        @param  index The index of a Loan.\n        @return The address of the Loan at `index`.\n     */\n    function loans(uint256 index) external view returns (address);\n\n    /**\n        @param  loan The address of a Loan.\n        @return Whether `loan` is a Loan.\n     */\n    function isLoan(address loan) external view returns (bool);\n\n    /**\n        @param  admin The address of a LoanFactoryAdmin.\n        @return Whether `admin` has permission to do certain operations in case of disaster management.\n     */\n    function loanFactoryAdmins(address admin) external view returns (bool);\n\n    /**\n        @dev   Sets MapleGlobals. \n        @dev   Only the Governor can call this function. \n        @param newGlobals Address of new MapleGlobals.\n     */\n    function setGlobals(address newGlobals) external;\n\n    /**\n        @dev    Create a new Loan. \n        @dev    It emits a `LoanCreated` event. \n        @param  liquidityAsset  The asset the Loan will raise funding in.\n        @param  collateralAsset The asset the Loan will use as collateral.\n        @param  flFactory       The factory to instantiate a FundingLocker from.\n        @param  clFactory       The factory to instantiate a CollateralLocker from.\n        @param  specs           The specifications for the Loan. \n                                    [0] => apr, \n                                    [1] => termDays, \n                                    [2] => paymentIntervalDays, \n                                    [3] => requestAmount, \n                                    [4] => collateralRatio. \n        @param  calcs           The calculators used for the Loan. \n                                    [0] => repaymentCalc, \n                                    [1] => lateFeeCalc, \n                                    [2] => premiumCalc. \n        @return loanAddress     Address of the instantiated Loan.\n     */\n    function createLoan(\n        address liquidityAsset,\n        address collateralAsset,\n        address flFactory,\n        address clFactory,\n        uint256[5] memory specs,\n        address[3] memory calcs\n    ) external returns (address);\n\n    /**\n        @dev   Sets a LoanFactory Admin. Only the Governor can call this function.\n        @dev   It emits a `LoanFactoryAdminSet` event.\n        @param loanFactoryAdmin An address being allowed or disallowed as a LoanFactory Admin.\n        @param allowed          The status of `loanFactoryAdmin` as an Admin.\n     */\n    function setLoanFactoryAdmin(address loanFactoryAdmin, bool allowed) external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. \n        @dev Only the Governor or a LoanFactory 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 Governor or a LoanFactory Admin can call this function.\n     */\n    function unpause() external;\n\n}\n\n////// contracts/core/pool/v1/interfaces/IPoolFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IExtendedFDT } from \"../../../funds-distribution-token/v1/interfaces/IExtendedFDT.sol\"; */\n\n/// @title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers.\ninterface IPoolFDT is IExtendedFDT {\n\n    /**\n        @dev The sum of all withdrawable interest.\n     */\n    function interestSum() external view returns (uint256);\n\n    /**\n        @dev The sum of all unrecognized losses.\n     */\n    function poolLosses() external view returns (uint256);\n\n    /**\n        @dev The amount of earned interest present and accounted for in this contract.\n     */\n    function interestBalance() external view returns (uint256);\n\n    /**\n        @dev The amount of losses present and accounted for in this contract.\n     */\n    function lossesBalance() external view returns (uint256);\n\n}\n\n////// contracts/core/pool/v1/PoolFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ExtendedFDT, SafeMath } from \"../../funds-distribution-token/v1/ExtendedFDT.sol\"; */\n\n/* import { IPoolFDT } from \"./interfaces/IPoolFDT.sol\"; */\n\n/// @title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers.\nabstract contract PoolFDT is IPoolFDT, ExtendedFDT {\n\n    using SafeMath       for uint256;\n\n    uint256 public override interestSum;\n    uint256 public override poolLosses;\n\n    uint256 public override interestBalance;\n    uint256 public override lossesBalance;\n\n    constructor(string memory name, string memory symbol) ExtendedFDT(name, symbol) public { }\n\n    /**\n        @dev Realizes losses incurred to LPs.\n     */\n    function _recognizeLosses() internal override returns (uint256 losses) {\n        losses = _prepareLossesWithdraw();\n\n        poolLosses = poolLosses.sub(losses);\n\n        _updateLossesBalance();\n    }\n\n    /**\n        @dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n        @return A int256 representing the difference of the new and previous losses balance.\n     */\n    function _updateLossesBalance() internal override returns (int256) {\n        uint256 _prevLossesTokenBalance = lossesBalance;\n\n        lossesBalance = poolLosses;\n\n        return int256(lossesBalance).sub(int256(_prevLossesTokenBalance));\n    }\n\n    /**\n        @dev    Updates the current interest balance and returns the difference of the new and previous interest balance.\n        @return A int256 representing the difference of the new and previous interest balance.\n     */\n    function _updateFundsTokenBalance() internal override returns (int256) {\n        uint256 _prevFundsTokenBalance = interestBalance;\n\n        interestBalance = interestSum;\n\n        return int256(interestBalance).sub(int256(_prevFundsTokenBalance));\n    }\n\n}\n\n////// contracts/core/pool/v1/interfaces/IPool.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IPoolFDT } from \"./IPoolFDT.sol\"; */\n\n/// @title Pool maintains all accounting and functionality related to Pools.\ninterface IPool is IPoolFDT {\n\n    /**\n        Initialized = The Pool has been initialized and is ready for liquidity.\n        Finalized   = The Pool has been sufficiently sourced wth liquidity.\n        Deactivated = The Pool has been emptied and deactivated.\n     */\n    enum State { Initialized, Finalized, Deactivated }\n\n    /**\n        @dev   Emits an event indicating a Loan was funded.\n        @param loan         The funded Loan.\n        @param debtLocker   The DebtLocker.\n        @param amountFunded The amount the Loan was funded for.\n     */\n    event LoanFunded(address indexed loan, address debtLocker, uint256 amountFunded);\n\n    /**\n        @dev   Emits an event indicating a Loan was claimed.\n        @param loan                The Loan.\n        @param interest            The interest.\n        @param principal           The principal.\n        @param fee                 The total fee.\n        @param stakeLockerPortion  The portion of the fee for Stakers.\n        @param poolDelegatePortion The portion of the fee for the Pool Delegate.\n     */\n    event Claim(address indexed loan, uint256 interest, uint256 principal, uint256 fee, uint256 stakeLockerPortion, uint256 poolDelegatePortion);\n\n    /**\n        @dev   Emits an event indicating some Balance was updated.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param token             The address of the token for which the balance of `liquidityProvider` changed.\n        @param balance           The new balance for `liquidityProvider`.\n     */\n    event BalanceUpdated(address indexed liquidityProvider, address indexed token, uint256 balance);\n\n    /**\n        @dev   Emits an event indicating a transfer of funds was performed by a custodian.\n        @param custodian The address of the custodian.\n        @param from      The source of funds that were custodied.\n        @param to        The destination of funds.\n        @param amount    The amount of custodied tokens transferred.\n     */\n    event CustodyTransfer(address indexed custodian, address indexed from, address indexed to, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating a change in the total amount in custodianship for an account.\n        @param liquidityProvider The address of amount who's funds are being custodied.\n        @param custodian         The address of the custodian.\n        @param oldAllowance      The original total amount in custodian by `custodian` for `liquidityProvider`.\n        @param newAllowance      The updated total amount in custodian by `custodian` for `liquidityProvider`.\n     */\n    event CustodyAllowanceChanged(address indexed liquidityProvider, address indexed custodian, uint256 oldAllowance, uint256 newAllowance);\n\n    /**\n        @dev   Emits an event indicating a that a Liquidity Provider's status has changed.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param status            The new status of `liquidityProvider`.\n     */\n    event LPStatusChanged(address indexed liquidityProvider, bool status);\n\n    /**\n        @dev   Emits an event indicating a that the Liquidity Cap for the Pool was set.\n        @param newLiquidityCap The new liquidity cap.\n     */\n    event LiquidityCapSet(uint256 newLiquidityCap);\n\n    /**\n        @dev   Emits an event indicating a that the lockup period for the Pool was set.\n        @param newLockupPeriod The new lockup cap.\n     */\n    event LockupPeriodSet(uint256 newLockupPeriod);\n\n    /**\n        @dev   Emits an event indicating a that the staking fee for the Pool was set.\n        @param newStakingFee The new fee Stakers earn (in basis points).\n     */\n    event StakingFeeSet(uint256 newStakingFee);\n\n    /**\n        @dev   Emits an event indicating a that the state of the Pool has changed.\n        @param state The new state of the Pool.\n     */\n    event PoolStateChanged(State state);\n\n    /**\n        @dev   Emits an event indicating a that the withdrawal cooldown for a Liquidity Provider of the Pool has updated.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param cooldown          The new withdrawal cooldown.\n     */\n    event Cooldown(address indexed liquidityProvider, uint256 cooldown);\n\n    /**\n        @dev   Emits an event indicating a that a Pool's openness to the public has changed.\n        @param isOpen Whether the Pool is open to the public to add liquidity.\n     */\n    event PoolOpenedToPublic(bool isOpen);\n\n    /**\n        @dev   Emits an event indicating a that a PoolAdmin was set.\n        @param poolAdmin The address of a PoolAdmin.\n        @param allowed   Whether `poolAdmin` is an admin of the Pool.\n     */\n    event PoolAdminSet(address indexed poolAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating a that a Liquidity Provider's effective deposit date has changed.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param depositDate       The new effective deposit date.\n     */\n    event DepositDateUpdated(address indexed liquidityProvider, uint256 depositDate);\n\n    /**\n        @dev   Emits an event indicating a that a Liquidity Provider's total amount in custody of custodians has changed.\n        @param liquidityProvider The address of a Liquidity Provider.\n        @param newTotalAllowance The total amount in custody of custodians for `liquidityProvider`.\n     */\n    event TotalCustodyAllowanceUpdated(address indexed liquidityProvider, uint256 newTotalAllowance);\n\n    /**\n        @dev   Emits an event indicating the one of the Pool's Loans defaulted.\n        @param loan                            The address of the Loan that defaulted.\n        @param defaultSuffered                 The amount of default suffered.\n        @param bptsBurned                      The amount of BPTs burned to recover funds.\n        @param bptsReturned                    The amount of BPTs returned to Liquidity Provider.\n        @param liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burning BPTs.\n     */\n    event DefaultSuffered(\n        address indexed loan,\n        uint256 defaultSuffered,\n        uint256 bptsBurned,\n        uint256 bptsReturned,\n        uint256 liquidityAssetRecoveredFromBurn\n    );\n\n    /**\n        @dev The factory type of `DebtLockerFactory`.\n     */\n    function DL_FACTORY() external pure returns (uint8);\n\n    /**\n        @dev The asset deposited by Lenders into the LiquidityLocker, for funding Loans.\n     */\n    function liquidityAsset() external pure returns (IERC20);\n\n    /**\n        @dev The Pool Delegate address, maintains full authority over the Pool.\n     */\n    function poolDelegate() external pure returns (address);\n\n    /**\n        @dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events.\n     */\n    function liquidityLocker() external pure returns (address);\n\n    /**\n        @dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events.\n     */\n    function stakeAsset() external pure returns (address);\n\n    /**\n        @dev The address of the StakeLocker, escrowing `stakeAsset`.\n     */\n    function stakeLocker() external pure returns (address);\n\n    /**\n        @dev The factory that deployed this Loan.\n     */\n    function superFactory() external pure returns (address);\n\n    /**\n        @dev The fee Stakers earn (in basis points).\n     */\n    function stakingFee() external view returns (uint256);\n\n    /**\n        @dev The fee the Pool Delegate earns (in basis points).\n     */\n    function delegateFee() external pure returns (uint256);\n\n    /**\n        @dev The sum of all outstanding principal on Loans.\n     */\n    function principalOut() external view returns (uint256);\n\n    /**\n        @dev The amount of liquidity tokens accepted by the Pool.\n     */\n    function liquidityCap() external view returns (uint256);\n\n    /**\n        @dev The period of time from an account's deposit date during which they cannot withdraw any funds.\n     */\n    function lockupPeriod() external view returns (uint256);\n\n    /**\n        @dev Whether the Pool is open to the public for LP deposits.\n     */\n    function openToPublic() external view returns (bool);\n\n    /**\n        @dev The state of the Pool.\n     */\n    function poolState() external view returns (State);\n\n    /**\n        @dev    Used for withdraw penalty calculation.\n        @param  account The address of an account.\n        @return The unix timestamp of the weighted average deposit date of `account`.\n     */\n    function depositDate(address account) external view returns (uint256);\n\n    /**\n        @param  loan              The address of a Loan.\n        @param  debtLockerFactory The address of a DebtLockerFactory.\n        @return The address of the DebtLocker corresponding to `loan` and `debtLockerFactory`.\n     */\n    function debtLockers(address loan, address debtLockerFactory) external view returns (address);\n\n    /**\n        @param  poolAdmin The address of a PoolAdmin.\n        @return Whether `poolAdmin` has permission to do certain operations in case of disaster management.\n     */\n    function poolAdmins(address poolAdmin) external view returns (bool);\n\n    /**\n        @param  liquidityProvider The address of a LiquidityProvider.\n        @return Whether `liquidityProvider` has early access to the Pool.\n     */\n    function allowedLiquidityProviders(address liquidityProvider) external view returns (bool);\n\n    /**\n        @param  liquidityProvider The address of a LiquidityProvider.\n        @return The unix timestamp of when individual LPs have notified of their intent to withdraw.\n     */\n    function withdrawCooldown(address liquidityProvider) external view returns (uint256);\n\n    /**\n        @param  account   The address of an account.\n        @param  custodian The address of a custodian.\n        @return The amount of PoolFDTs of `account` that are \"locked\" at `custodian`.\n     */\n    function custodyAllowance(address account, address custodian) external view returns (uint256);\n\n    /**\n        @param  account   The address of an account.\n        @return The total amount of PoolFDTs that are \"locked\" for `account`. Cannot be greater than the account's balance.\n     */\n    function totalCustodyAllowance(address account) external view returns (uint256);\n\n    /**\n        @dev Finalizes the Pool, enabling deposits. \n        @dev Checks the amount the Pool Delegate deposited to the StakeLocker. \n        @dev Only the Pool Delegate can call this function. \n        @dev It emits a `PoolStateChanged` event. \n     */\n    function finalize() external;\n\n    /**\n        @dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `LoanFunded` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param loan      The address of the Loan to fund.\n        @param dlFactory The address of the DebtLockerFactory to utilize.\n        @param amt       The amount to fund the Loan.\n     */\n    function fundLoan(address loan, address dlFactory, uint256 amt) external;\n\n    /**\n        @dev   Liquidates a Loan. \n        @dev   The Pool Delegate could liquidate the Loan only when the Loan completes its grace period. \n        @dev   The Pool Delegate can claim its proportion of recovered funds from the liquidation using the `claim()` function. \n        @dev   Only the Pool Delegate can call this function. \n        @param loan      The address of the Loan to liquidate.\n        @param dlFactory The address of the DebtLockerFactory that is used to pull corresponding DebtLocker.\n     */\n    function triggerDefault(address loan, address dlFactory) external;\n\n    /**\n        @dev    Claims available funds for the Loan through a specified DebtLockerFactory. \n        @dev    Only the Pool Delegate or a Pool Admin can call this function. \n        @dev    It emits two `BalanceUpdated` events. \n        @dev    It emits a `Claim` event. \n        @param  loan      The address of the loan to claim from.\n        @param  dlFactory The address of the DebtLockerFactory.\n        @return claimInfo The claim details. \n                    [0] => Total amount claimed, \n                    [1] => Interest portion claimed, \n                    [2] => Principal portion claimed, \n                    [3] => Fee portion claimed, \n                    [4] => Excess portion claimed, \n                    [5] => Recovered portion claimed (from liquidations), \n                    [6] => Default suffered. \n     */\n    function claim(address loan, address dlFactory) external returns (uint256[7] memory claimInfo);\n\n    /**\n        @dev Triggers deactivation, permanently shutting down the Pool. \n        @dev Must have less than 100 USD worth of Liquidity Asset `principalOut`. \n        @dev Only the Pool Delegate can call this function. \n        @dev It emits a `PoolStateChanged` event. \n     */\n    function deactivate() external;\n    \n    /**\n        @dev   Sets the liquidity cap. \n        @dev   Only the Pool Delegate or a Pool Admin can call this function. \n        @dev   It emits a `LiquidityCapSet` event. \n        @param newLiquidityCap The new liquidity cap value.\n     */\n    function setLiquidityCap(uint256 newLiquidityCap) external;\n\n    /**\n        @dev   Sets the lockup period. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `LockupPeriodSet` event. \n        @param newLockupPeriod The new lockup period used to restrict the withdrawals.\n     */\n    function setLockupPeriod(uint256 newLockupPeriod) external;\n\n    /**\n        @dev   Sets the staking fee. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `StakingFeeSet` event. \n        @param newStakingFee The new staking fee.\n     */\n    function setStakingFee(uint256 newStakingFee) external;\n\n    /**\n        @dev   Sets the account status in the Pool's allowlist. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits an `LPStatusChanged` event. \n        @param account The address to set status for.\n        @param status  The status of an account in the allowlist.\n     */\n    function setAllowList(address account, bool status) external;\n\n    /**\n        @dev   Sets a Pool Admin. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `PoolAdminSet` event. \n        @param poolAdmin An address being allowed or disallowed as a Pool Admin.\n        @param allowed   Whether `poolAdmin` is an admin of the Pool.\n     */\n    function setPoolAdmin(address poolAdmin, bool allowed) external;\n\n    /**\n        @dev   Sets whether the Pool is open to the public. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `PoolOpenedToPublic` event. \n        @param open Whether the Pool is open to liquidity from the public.\n     */\n    function setOpenToPublic(bool open) external;\n\n    /**\n        @dev   Handles Liquidity Providers depositing of Liquidity Asset into the LiquidityLocker, minting PoolFDTs. \n        @dev   It emits a `DepositDateUpdated` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @dev   It emits a `Cooldown` event. \n        @param amt The amount of Liquidity Asset to deposit.\n     */\n    function deposit(uint256 amt) external;\n\n    /**\n        @dev Activates the cooldown period to withdraw. \n        @dev It can't be called if the account is not providing liquidity. \n        @dev It emits a `Cooldown` event. \n     */\n    function intendToWithdraw() external;\n\n    /**\n        @dev Cancels an initiated withdrawal by resetting the account's withdraw cooldown. \n        @dev It emits a `Cooldown` event. \n     */\n    function cancelWithdraw() external;\n\n    /**\n        @dev   Handles Liquidity Providers withdrawing of Liquidity Asset from the LiquidityLocker, burning PoolFDTs. \n        @dev   It emits two `BalanceUpdated` event. \n        @param amt The amount of Liquidity Asset to withdraw.\n     */\n    function withdraw(uint256 amt) external;\n\n    /**\n        @dev Withdraws all claimable interest from the LiquidityLocker for an account using `interestSum` accounting. \n        @dev It emits a `BalanceUpdated` event. \n     */\n    function withdrawFunds() external override;\n\n    /**\n        @dev   Increases the custody allowance for a given Custodian corresponding to the calling account (`msg.sender`). \n        @dev   It emits a `CustodyAllowanceChanged` event. \n        @dev   It emits a `TotalCustodyAllowanceUpdated` event. \n        @param custodian The address which will act as Custodian of a given amount for an account.\n        @param amount    The number of additional FDTs to be custodied by the Custodian.\n     */\n    function increaseCustodyAllowance(address custodian, uint256 amount) external;\n\n    /**\n        @dev   Transfers custodied PoolFDTs back to the account. \n        @dev   `from` and `to` should always be equal in this implementation. \n        @dev   This means that the Custodian can only decrease their own allowance and unlock funds for the original owner. \n        @dev   It emits a `CustodyTransfer` event. \n        @dev   It emits a `CustodyAllowanceChanged` event. \n        @dev   It emits a `TotalCustodyAllowanceUpdated` event. \n        @param from   The address which holds the PoolFDTs.\n        @param to     The address which will be the new owner of the amount of PoolFDTs.\n        @param amount The amount of PoolFDTs transferred.\n     */\n    function transferByCustodian(address from, address to, uint256 amount) 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    Calculates the value of BPT in units of Liquidity Asset.\n        @param  _bPool          The address of Balancer pool.\n        @param  _liquidityAsset The asset used by Pool for liquidity to fund Loans.\n        @param  _staker         The address that deposited BPTs to StakeLocker.\n        @param  _stakeLocker    Escrows BPTs deposited by Staker.\n        @return USDC value of staker BPTs.\n     */\n    function BPTVal(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker\n    ) external view returns (uint256);\n\n    /**\n        @dev   Checks that the given deposit amount is acceptable based on current liquidityCap.\n        @param depositAmt The amount of tokens (i.e liquidityAsset type) the account is trying to deposit.\n     */\n    function isDepositAllowed(uint256 depositAmt) external view returns (bool);\n\n    /**\n        @dev    Returns information on the stake requirements.\n        @return The min amount of Liquidity Asset coverage from staking required.\n        @return The present amount of Liquidity Asset coverage from the Pool Delegate stake.\n        @return Whether enough stake is present from the Pool Delegate for finalization.\n        @return The staked BPTs required for minimum Liquidity Asset coverage.\n        @return The current staked BPTs.\n     */\n    function getInitialStakeRequirements() external view returns (uint256, uint256, bool, uint256, uint256);\n\n    /**\n        @dev    Calculates BPTs required if burning BPTs for the Liquidity Asset, given supplied `tokenAmountOutRequired`.\n        @param  _bPool                        The Balancer pool that issues the BPTs.\n        @param  _liquidityAsset               Swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  _staker                       The address that deposited BPTs to StakeLocker.\n        @param  _stakeLocker                  Escrows BPTs deposited by Staker.\n        @param  _liquidityAssetAmountRequired The amount of Liquidity Asset required to recover.\n        @return The `poolAmountIn` required.\n        @return The `poolAmountIn` currently staked.\n     */\n    function getPoolSharesRequired(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker,\n        uint256 _liquidityAssetAmountRequired\n    ) external view returns (uint256, uint256);\n\n    /**\n      @dev    Checks that the Pool state is `Finalized`.\n      @return Whether the Pool is in a Finalized state.\n     */\n    function isPoolFinalized() external view returns (bool);\n\n}\n\n////// contracts/core/pool/v1/interfaces/IPoolFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IMapleGlobals } from \"../../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n\n/// @title PoolFactory instantiates Pools.\ninterface IPoolFactory {\n\n    /**\n        @dev   Emits an event indicating a PoolFactoryAdmin was allowed.\n        @param poolFactoryAdmin The address of a PoolFactoryAdmin.\n        @param allowed          Whether `poolFactoryAdmin` is allowed as an admin of the PoolFactory.\n     */\n    event PoolFactoryAdminSet(address indexed poolFactoryAdmin, bool allowed);\n\n    /**\n        @dev   Emits an event indicating a Pool was created.\n        @param pool             The address of the Pool.\n        @param delegate         The PoolDelegate.\n        @param liquidityAsset   The asset Loans will be funded in.\n        @param stakeAsset       The asset stake will be locked in.\n        @param liquidityLocker  The address of the LiquidityLocker.\n        @param stakeLocker      The address of the StakeLocker.\n        @param stakingFee       The fee paid to stakers on Loans.\n        @param stakingFee       The fee paid to the Pool Delegate on Loans.\n        @param liquidityCap     The maximum liquidity the Pool will hold.\n        @param name             The name of the Pool FDTs.\n        @param symbol           The symbol of the Pool FDTs.\n     */\n    event PoolCreated(\n        address indexed pool,\n        address indexed delegate,\n        address liquidityAsset,\n        address stakeAsset,\n        address liquidityLocker,\n        address stakeLocker,\n        uint256 stakingFee,\n        uint256 delegateFee,\n        uint256 liquidityCap,\n        string  name,\n        string  symbol\n    );\n\n    /**\n        @dev The factory type of `LiquidityLockerFactory`.\n     */\n    function LL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The factory type of `StakeLockerFactory`.\n     */\n    function SL_FACTORY() external view returns (uint8);\n\n    /**\n        @dev The incrementor for number of Pools created.\n     */\n    function poolsCreated() external view returns (uint256);\n\n    /**\n        @dev The current MapleGlobals instance.\n     */\n    function globals() external view returns (IMapleGlobals);\n\n    /**\n        @param  index An index of a Pool.\n        @return The address of the Pool at `index`.\n     */\n    function pools(uint256 index) external view returns (address);\n\n    /**\n        @param  pool The address of a Pool.\n        @return Whether the contract at `address` is a Pool.\n     */\n    function isPool(address pool) external view returns (bool);\n\n    /**\n        @param  poolFactoryAdmin The address of a PoolFactoryAdmin.\n        @return Whether the `poolFactoryAdmin` has permission to do certain operations in case of disaster management\n     */\n    function poolFactoryAdmins(address poolFactoryAdmin) external view returns (bool);\n\n    /**\n        @dev   Sets MapleGlobals instance. \n        @dev   Only the Governor can call this function. \n        @param newGlobals The address of new MapleGlobals.\n     */\n    function setGlobals(address newGlobals) external;\n\n    /**\n        @dev    Instantiates a Pool. \n        @dev    It emits a `PoolCreated` event. \n        @param  liquidityAsset The asset escrowed in a LiquidityLocker.\n        @param  stakeAsset     The asset escrowed in a StakeLocker.\n        @param  slFactory      The factory to instantiate a StakeLocker from.\n        @param  llFactory      The factory to instantiate a LiquidityLocker from.\n        @param  stakingFee     The fee that Stakers earn on interest, in basis points.\n        @param  delegateFee    The fee that the Pool Delegate earns on interest, in basis points.\n        @param  liquidityCap   The amount of Liquidity Asset accepted by the Pool.\n        @return poolAddress    The address of the instantiated Pool.\n     */\n    function createPool(\n        address liquidityAsset,\n        address stakeAsset,\n        address slFactory,\n        address llFactory,\n        uint256 stakingFee,\n        uint256 delegateFee,\n        uint256 liquidityCap\n    ) external returns (address poolAddress);\n\n    /**\n        @dev   Sets a PoolFactory Admin. \n        @dev   Only the Governor can call this function. \n        @dev   It emits a `PoolFactoryAdminSet` event. \n        @param poolFactoryAdmin An address being allowed or disallowed as a PoolFactory Admin.\n        @param allowed          Whether `poolFactoryAdmin` is allowed as a PoolFactory Admin.\n     */\n    function setPoolFactoryAdmin(address poolFactoryAdmin, bool allowed) external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. \n        @dev Only the Governor or a PoolFactory 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 Governor or a PoolFactory Admin can call this function. \n     */\n    function unpause() external;\n\n}\n\n////// contracts/core/stake-locker/v1/interfaces/IStakeLockerFDT.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IExtendedFDT } from \"../../../funds-distribution-token/v1/interfaces/IExtendedFDT.sol\"; */\n\n/// @title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers.\ninterface IStakeLockerFDT is IExtendedFDT {\n\n    /**\n        @dev The ERC-2222 Funds Token.\n     */\n    function fundsToken() external view returns (IERC20);\n\n    /**\n        @dev The sum of all unrecognized losses.\n     */\n    function bptLosses() external view returns (uint256);\n\n    /**\n        @dev The amount of losses present and accounted for in this contract.\n     */\n    function lossesBalance() external view returns (uint256);\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\n////// contracts/core/stake-locker/v1/interfaces/IStakeLocker.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\n/* import { IStakeLockerFDT } from \"./IStakeLockerFDT.sol\"; */\n\n/// @title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest.\ninterface IStakeLocker is IStakeLockerFDT {\n\n    /**\n        @dev   Emits an event indicating that the Stake Locker is now open to the public.\n     */\n    event StakeLockerOpened();\n\n    /**\n        @dev   Emits an event indicating some Balance was updated.\n        @param staker  The address of a Staker.\n        @param token   The address of the token for which the balance of `staker` changed.\n        @param balance The new balance for `staker`.\n     */\n    event BalanceUpdated(address indexed staker, address indexed token, uint256 balance);\n\n    /**\n        @dev   Emits an event indicating that the ability of `staker` to stake before the locker is open to the public, has changed.\n        @param staker The address of some account.\n        @param status Whether `staker` can stake before the locker is open to the public.\n     */\n    event AllowListUpdated(address indexed staker, bool status);\n\n    /**\n        @dev   Emits an event indicating a that a Staker's effective stake date has changed.\n        @param staker    The address of a Staker.\n        @param stakeDate The new effective stake date.\n     */\n    event StakeDateUpdated(address indexed staker, uint256 stakeDate);\n\n    /**\n        @dev   Emits an event indicating that the stake lockup period has changed.\n        @param lockupPeriod The new stake lockup period.\n     */\n    event LockupPeriodUpdated(uint256 lockupPeriod);\n\n    /**\n        @dev   Emits an event indicating that the cooldown timestamp for a staker has changed.\n        @param staker   The address of a Staker.\n        @param cooldown The new cooldown timestamp for `staker`.\n     */\n    event Cooldown(address indexed staker, uint256 cooldown);\n\n    /**\n        @dev   Emits an event indicating `staker` has added `amount` to the total they have staked.\n        @param staker The address of a Staker.\n        @param amount The additional amount staked.\n     */\n    event Stake(address indexed staker, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating `staker` has removed `amount` from the total they have staked.\n        @param staker The address of a Staker.\n        @param amount The amount unstaked.\n     */\n    event Unstake(address indexed staker, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that a Custodian transferred some StakeLockerFDTs for purposes of custody.\n        @param custodian The address of the Custodian initiating the transfer.\n        @param from      The account that owns the StakeLockerFDTs.\n        @param to        The address of a Custodian taking custody of the amount.\n        @param amount    The amount of StakeLockerFDTs being re-custodied.\n     */\n    event CustodyTransfer(address indexed custodian, address indexed from, address indexed to, uint256 amount);\n\n    /**\n        @dev   Emits an event indicating that the amount being custodied by a Custodian, on behalf of a Staker, has changed.\n        @param staker       The address of a Staker.\n        @param custodian    The address of a Custodian.\n        @param oldAllowance The old amount of StakeLockerFDTs `custodian` had custodied on behalf of `staker`.\n        @param newAllowance The new amount of StakeLockerFDTs `custodian` has custodied on behalf of `staker`.\n     */\n    event CustodyAllowanceChanged(address indexed staker, address indexed custodian, uint256 oldAllowance, uint256 newAllowance);\n\n    /**\n        @dev   Emits an event indicating that the total amount of StakeLockerFDTs custodied, on behalf of a Staker, by all custodians, has changed.\n        @param staker            The address of a Staker.\n        @param newTotalAllowance The total amount of StakeLockerFDTs custodied, on behalf of `staker`, by all custodians.\n     */\n    event TotalCustodyAllowanceUpdated(address indexed staker, uint256 newTotalAllowance);\n\n    /**\n        @dev The asset deposited by Stakers into this contract, for liquidation during defaults.\n     */\n    function stakeAsset() external view returns (IERC20);\n\n    /**\n        @dev The Liquidity Asset for the Pool as well as the dividend token for StakeLockerFDT interest.\n     */\n    function liquidityAsset() external view returns (address);\n\n    /**\n        @dev The parent Pool.\n     */\n    function pool() external view returns (address);\n\n    /**\n        @dev The number of seconds for which unstaking is not allowed.\n     */\n    function lockupPeriod() external view returns (uint256);\n\n    /**\n        @param  account The address of a Staker.\n        @return The effective stake date of `account`.\n     */\n    function stakeDate(address account) external returns (uint256);\n\n    /**\n        @param  account The address of a Staker.\n        @return The timestamp of when `account` called `cooldown()`.\n     */\n    function unstakeCooldown(address account) external view returns (uint256);\n\n    /**\n        @param  account The address of a Staker.\n        @return Whether `account` is allowed.\n     */\n    function allowed(address account) external view returns (bool);\n\n    /**\n        @param  account   The address of an account.\n        @param  custodian The address of a custodian.\n        @return The amount of StakeLockerFDTs of `account` that are \"locked\" at `custodian`.\n     */\n    function custodyAllowance(address account, address custodian) external view returns (uint256);\n\n    /**\n        @param  account   The address of an account.\n        @return The total amount of StakeLockerFDTs that are \"locked\" for a given account, cannot be greater than balance.\n     */\n    function totalCustodyAllowance(address account) external view returns (uint256);\n\n    function openToPublic() external view returns (bool);\n\n    /**\n        @dev   Updates Staker status on the allowlist. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits an `AllowListUpdated` event. \n        @param staker The address of the Staker to set status for.\n        @param status The status of the Staker on allowlist.\n     */\n    function setAllowlist(address staker, bool status) external;\n\n    /**\n        @dev Sets the StakeLocker as open to the public. \n        @dev Only the Pool Delegate can call this function. \n        @dev It emits a `StakeLockerOpened` event. \n     */\n    function openStakeLockerToPublic() external;\n\n    /**\n        @dev   Sets the lockup period. \n        @dev   Only the Pool Delegate can call this function. \n        @dev   It emits a `LockupPeriodUpdated` event. \n        @param newLockupPeriod New lockup period used to restrict unstaking.\n     */\n    function setLockupPeriod(uint256 newLockupPeriod) external;\n\n    /**\n        @dev   Transfers an amount of Stake Asset to a destination account. \n        @dev   Only the Pool can call this function. \n        @param dst The destination to transfer Stake Asset to.\n        @param amt The amount of Stake Asset to transfer.\n     */\n    function pull(address dst, uint256 amt) external;\n\n    /**\n        @dev   Updates loss accounting for StakeLockerFDTs after BPTs have been burned. \n        @dev   Only the Pool can call this function. \n        @param bptsBurned The amount of BPTs that have been burned.\n     */\n    function updateLosses(uint256 bptsBurned) external;\n\n    /**\n        @dev   Handles a Staker's depositing of an amount of Stake Asset, minting them StakeLockerFDTs. \n        @dev   It emits a `StakeDateUpdated` event. \n        @dev   It emits a `Stake` event. \n        @dev   It emits a `Cooldown` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param amt The amount of Stake Asset (BPTs) to deposit.\n     */\n    function stake(uint256 amt) external;\n\n    /**\n        @dev Activates the cooldown period to unstake. \n        @dev It can't be called if the account is not staking. \n        @dev It emits a `Cooldown` event. \n     */\n    function intendToUnstake() external;\n\n    /**\n        @dev Cancels an initiated unstake by resetting the calling account's unstake cooldown. \n        @dev It emits a `Cooldown` event. \n     */\n    function cancelUnstake() external;\n\n    /**\n        @dev   Handles a Staker's withdrawing of an amount of Stake Asset, minus any losses. \n        @dev   It also claims interest and burns StakeLockerFDTs for the calling account. \n        @dev   It emits an `Unstake` event. \n        @dev   It emits a `BalanceUpdated` event. \n        @param amt The amount of Stake Asset (BPTs) to withdraw.\n     */\n    function unstake(uint256 amt) external;\n\n    /**\n        @dev Withdraws all claimable interest earned from the StakeLocker for an account. \n        @dev It emits a `BalanceUpdated` event if there are withdrawable funds. \n     */\n    function withdrawFunds() external override;    \n\n    /**\n        @dev   Increases the custody allowance for a given Custodian corresponding to the account (`msg.sender`).\n        @dev   It emits a `CustodyAllowanceChanged` event.\n        @dev   It emits a `TotalCustodyAllowanceUpdated` event.\n        @param custodian The address which will act as Custodian of a given amount for an account.\n        @param amount    The number of additional FDTs to be custodied by the Custodian.\n     */\n    function increaseCustodyAllowance(address custodian, uint256 amount) external;\n\n    /**\n        @dev   Transfers custodied StakeLockerFDTs back to the account. \n        @dev   `from` and `to` should always be equal in this implementation. \n        @dev   This means that the Custodian can only decrease their own allowance and unlock funds for the original owner. \n        @dev   It emits a `CustodyTransfer` event. \n        @dev   It emits a `CustodyAllowanceChanged` event. \n        @dev   It emits a `TotalCustodyAllowanceUpdated` event. \n        @param from   The address which holds the StakeLockerFDTs.\n        @param to     The address which will be the new owner of the amount of StakeLockerFDTs.\n        @param amount The mount of StakeLockerFDTs transferred.\n     */\n    function transferByCustodian(address from, address to, uint256 amount) external;\n\n    /**\n        @dev Triggers paused state. \n        @dev Halts functionality for certain functions. \n        @dev Only the Pool Delegate or a Pool 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 Pool Delegate or a Pool Admin can call this function.\n     */\n    function unpause() external;\n\n    /**\n        @dev Returns if the unstake cooldown period has passed for `msg.sender` and if they are in the unstake window.\n     */\n    function isUnstakeAllowed(address from) external view returns (bool);\n\n    /**\n        @dev Returns if an account is allowed to receive a transfer. \n        @dev This is only possible if they have zero cooldown or they are past their unstake window. \n     */\n    function isReceiveAllowed(uint256 _unstakeCooldown) external view returns (bool);\n\n}\n\n////// contracts/core/stake-locker/v1/interfaces/IStakeLockerFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ISubFactory } from \"../../../subfactory/v1/interfaces/ISubFactory.sol\"; */\n\n/// @title StakeLockerFactory instantiates StakeLockers.\ninterface IStakeLockerFactory is ISubFactory {\n\n    /**\n        @dev   Emits an event indicating a StakeLocker was created.\n        @param owner          The owner of the StakeLocker.\n        @param stakeLocker    The address of the StakeLocker.\n        @param stakeAsset     The Stake Asset this StakeLocker will escrow.\n        @param liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n        @param name           The name of the StakeLockerFDTs.\n        @param symbol         The symbol of the StakeLockerFDTs.\n     */\n    event StakeLockerCreated(\n        address indexed owner,\n        address stakeLocker,\n        address stakeAsset,\n        address liquidityAsset,\n        string name,\n        string symbol\n    );\n\n    /**\n        @param  stakeLocker The address of a StakeLocker.\n        @return The address of the owner of StakeLocker at `stakeLocker`.\n     */\n    function owner(address stakeLocker) external returns (address);\n\n    /**\n        @param  stakeLocker Some address.\n        @return Whether `stakeLocker` is a StakeLocker.\n     */\n    function isLocker(address stakeLocker) external returns (bool);\n\n    /**\n        @dev The type of the factory (i.e FactoryType::STAKE_LOCKER_FACTORY).\n     */\n    function factoryType() external override pure returns (uint8);\n\n    /**\n        @dev    Instantiate a StakeLocker.\n        @dev    It emits a `StakeLockerCreated` event.\n        @param  stakeAsset     The address of the Stake Asset (generally Balancer Pool BPTs).\n        @param  liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n        @return stakeLocker    The address of the instantiated StakeLocker.\n     */\n    function newLocker(address stakeAsset, address liquidityAsset) external returns (address stakeLocker);\n\n}\n\n////// contracts/external-interfaces/IBPool.sol\n/* pragma solidity 0.6.11; */\n\ninterface IBPool {\n\n    function transfer(address, uint256) external returns (bool);\n\n    function INIT_POOL_SUPPLY() external view returns (uint256);\n\n    function MAX_OUT_RATIO() external view returns (uint256);\n\n    function bind(address, uint256, uint256) external;\n\n    function balanceOf(address) external view returns (uint256);\n\n    function finalize() external;\n\n    function gulp(address) external;\n\n    function isFinalized() external view returns (bool);\n\n    function isBound(address) external view returns (bool);\n\n    function getNumTokens() external view returns (uint256);\n\n    function getBalance(address) external view returns (uint256);\n\n    function getNormalizedWeight(address) external view returns (uint256);\n\n    function getDenormalizedWeight(address) external view returns (uint256);\n\n    function getTotalDenormalizedWeight() external view returns (uint256);\n\n    function getSwapFee() external view returns (uint256);\n\n    function totalSupply() external view returns (uint256);\n\n    function getFinalTokens() external view returns (address[] memory);\n\n    function joinPool(uint poolAmountOut, uint[] calldata maxAmountsIn) external;\n\n    function calcSingleOutGivenPoolIn(\n        uint256 tokenBalanceOut,\n        uint256 tokenWeightOut,\n        uint256 poolSupply,\n        uint256 totalWeight,\n        uint256 poolAmountIn,\n        uint256 swapFee\n    ) external pure returns (uint256);\n\n    function calcPoolInGivenSingleOut(\n        uint256 tokenBalanceOut,\n        uint256 tokenWeightOut,\n        uint256 poolSupply,\n        uint256 totalWeight,\n        uint256 tokenAmountOut,\n        uint256 swapFee\n    ) external pure returns (uint256);\n\n    function exitswapExternAmountOut(\n        address tokenOut,\n        uint256 tokenAmountOut,\n        uint256 maxPoolAmountIn\n    ) external returns (uint256 poolAmountIn);\n\n}\n\n////// contracts/external-interfaces/IERC20Details.sol\n/* pragma solidity 0.6.11; */\n\n/* import { IERC20 } from \"../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\"; */\n\ninterface IERC20Details is IERC20 {\n\n    function name() external view returns (string memory);\n\n    function symbol() external view returns (string memory);\n\n    function decimals() external view returns (uint256);\n\n}\n\n////// lib/openzeppelin-contracts/contracts/utils/Address.sol\n/* pragma solidity >=0.6.2 <0.8.0; */\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize, which returns 0 for contracts in\n        // construction, since the code is only stored at the end of the\n        // constructor execution.\n\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { size := extcodesize(account) }\n        return size > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n        (bool success, ) = recipient.call{ value: amount }(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain`call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n      return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.call{ value: value }(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return _verifyCallResult(success, returndata, errorMessage);\n    }\n\n    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n\n                // solhint-disable-next-line no-inline-assembly\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n\n////// lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/* import \"./IERC20.sol\"; */\n/* import \"../../math/SafeMath.sol\"; */\n/* import \"../../utils/Address.sol\"; */\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    using SafeMath for uint256;\n    using Address for address;\n\n    function safeTransfer(IERC20 token, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n     * @dev Deprecated. This function has issues similar to the ones found in\n     * {IERC20-approve}, and its usage is discouraged.\n     *\n     * Whenever possible, use {safeIncreaseAllowance} and\n     * {safeDecreaseAllowance} instead.\n     */\n    function safeApprove(IERC20 token, address spender, uint256 value) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        // solhint-disable-next-line max-line-length\n        require((value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeERC20: approve from non-zero to non-zero allowance\"\n        );\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 newAllowance = token.allowance(address(this), spender).add(value);\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n        uint256 newAllowance = token.allowance(address(this), spender).sub(value, \"SafeERC20: decreased allowance below zero\");\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        if (returndata.length > 0) { // Return data is optional\n            // solhint-disable-next-line max-line-length\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }\n}\n\n////// contracts/libraries/pool/v1/PoolLib.sol\n/* pragma solidity 0.6.11; */\n\n/* import { SafeMath }          from \"../../../../lib/openzeppelin-contracts/contracts/math/SafeMath.sol\"; */\n/* import { IERC20, SafeERC20 } from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\"; */\n\n/* import { IBPool }        from \"../../../external-interfaces/IBPool.sol\"; */\n/* import { IERC20Details } from \"../../../external-interfaces/IERC20Details.sol\"; */\n\n/* import { IDebtLockerFactory } from \"../../../core/debt-locker/v1/interfaces/IDebtLockerFactory.sol\"; */\n/* import { IMapleGlobals }      from \"../../../core/globals/v1/interfaces/IMapleGlobals.sol\"; */\n/* import { ILoan }              from \"../../../core/loan/v1/interfaces/ILoan.sol\"; */\n/* import { ILoanFactory }       from \"../../../core/loan/v1/interfaces/ILoanFactory.sol\"; */\n/* import { ILiquidityLocker }   from \"../../../core/liquidity-locker/v1/interfaces/ILiquidityLocker.sol\"; */\n/* import { IStakeLocker }       from \"../../../core/stake-locker/v1/interfaces/IStakeLocker.sol\"; */\n\n/// @title PoolLib is a library of utility functions used by Pool.\nlibrary PoolLib {\n\n    using SafeMath for uint256;\n    using SafeERC20 for IERC20;\n\n    uint256 public constant MAX_UINT256 = uint256(-1);\n    uint256 public constant WAD         = 10 ** 18;\n    uint8   public constant DL_FACTORY  = 1;         // Factory type of DebtLockerFactory\n\n    event         LoanFunded(address indexed loan, address debtLocker, uint256 amountFunded);\n    event DepositDateUpdated(address indexed liquidityProvider, uint256 depositDate);\n\n    /***************************************/\n    /*** Pool Delegate Utility Functions ***/\n    /***************************************/\n\n    /**\n        @dev   Conducts sanity checks for Pools in the constructor.\n        @param globals        The instance of a MapleGlobals.\n        @param liquidityAsset The asset used by Pool for liquidity to fund loans.\n        @param stakeAsset     The asset escrowed in StakeLocker.\n        @param stakingFee     The fee that the Stakers earn on interest, in basis points.\n        @param delegateFee    The fee that the Pool Delegate earns on interest, in basis points.\n     */\n    function poolSanityChecks(\n        IMapleGlobals globals,\n        address liquidityAsset,\n        address stakeAsset,\n        uint256 stakingFee,\n        uint256 delegateFee\n    ) external view {\n        IBPool bPool = IBPool(stakeAsset);\n\n        require(globals.isValidLiquidityAsset(liquidityAsset), \"P:INVALID_LIQ_ASSET\");\n        require(stakingFee.add(delegateFee) <= 10_000,         \"P:INVALID_FEES\");\n        require(\n            globals.isValidBalancerPool(address(stakeAsset)) &&\n            bPool.isBound(globals.mpl())                     &&\n            bPool.isBound(liquidityAsset)                    &&\n            bPool.isFinalized(),\n            \"P:INVALID_BALANCER_POOL\"\n        );\n    }\n\n    /**\n        @dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n        @dev   It emits a `LoanFunded` event. \n        @param debtLockers     The mapping reference that contains the DebtLocker contract address corresponding to the DebtLockerFactory and Loan.\n        @param superFactory    The address of the PoolFactory.\n        @param liquidityLocker The address of the LiquidityLocker contract attached with this Pool.\n        @param loan            The address of the Loan to fund.\n        @param dlFactory       The DebtLockerFactory to utilize.\n        @param amt             The amount to fund the Loan.\n     */\n    function fundLoan(\n        mapping(address => mapping(address => address)) storage debtLockers,\n        address superFactory,\n        address liquidityLocker,\n        address loan,\n        address dlFactory,\n        uint256 amt\n    ) external {\n        IMapleGlobals globals = IMapleGlobals(ILoanFactory(superFactory).globals());\n        address loanFactory   = ILoan(loan).superFactory();\n\n        // Auth checks.\n        require(globals.isValidLoanFactory(loanFactory),                        \"P:INVALID_LF\");\n        require(ILoanFactory(loanFactory).isLoan(loan),                         \"P:INVALID_L\");\n        require(globals.isValidSubFactory(superFactory, dlFactory, DL_FACTORY), \"P:INVALID_DLF\");\n\n        address debtLocker = debtLockers[loan][dlFactory];\n\n        // Instantiate DebtLocker if it doesn't exist withing this factory\n        if (debtLocker == address(0)) {\n            debtLocker = IDebtLockerFactory(dlFactory).newLocker(loan);\n            debtLockers[loan][dlFactory] = debtLocker;\n        }\n\n        // Fund the Loan.\n        ILiquidityLocker(liquidityLocker).fundLoan(loan, debtLocker, amt);\n\n        emit LoanFunded(loan, debtLocker, amt);\n    }\n\n    /**\n        @dev    Helper function used by Pool `claim` function, for when if a default has occurred.\n        @param  liquidityAsset                  The IERC20 of Liquidity Asset.\n        @param  stakeLocker                     The address of StakeLocker.\n        @param  stakeAsset                      The address of BPTs.\n        @param  defaultSuffered                 The amount of shortfall in defaulted Loan after liquidation.\n        @return bptsBurned                      The amount of BPTs burned to cover shortfall.\n        @return postBurnBptBal                  The amount of BPTs returned to StakeLocker after burn.\n        @return liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burn.\n     */\n    function handleDefault(\n        IERC20  liquidityAsset,\n        address stakeLocker,\n        address stakeAsset,\n        uint256 defaultSuffered\n    )\n        external\n        returns (\n            uint256 bptsBurned,\n            uint256 postBurnBptBal,\n            uint256 liquidityAssetRecoveredFromBurn\n        )\n    {\n\n        IBPool bPool = IBPool(stakeAsset);  // stakeAsset = Balancer Pool Tokens\n\n        // Check amount of Liquidity Asset coverage that exists in the StakeLocker.\n        uint256 availableSwapOut = getSwapOutValueLocker(stakeAsset, address(liquidityAsset), stakeLocker);\n\n        // Pull BPTs from StakeLocker.\n        IStakeLocker(stakeLocker).pull(address(this), bPool.balanceOf(stakeLocker));\n\n        // To maintain accounting, account for direct transfers into Pool.\n        uint256 preBurnLiquidityAssetBal = liquidityAsset.balanceOf(address(this));\n        uint256 preBurnBptBal            = bPool.balanceOf(address(this));\n\n        // Burn enough BPTs for Liquidity Asset to cover default suffered.\n        bPool.exitswapExternAmountOut(\n            address(liquidityAsset),\n            availableSwapOut >= defaultSuffered ? defaultSuffered : availableSwapOut,  // Burn BPTs up to defaultSuffered amount\n            preBurnBptBal\n        );\n\n        // Return remaining BPTs to StakeLocker.\n        postBurnBptBal = bPool.balanceOf(address(this));\n        bptsBurned     = preBurnBptBal.sub(postBurnBptBal);\n        bPool.transfer(stakeLocker, postBurnBptBal);\n        liquidityAssetRecoveredFromBurn = liquidityAsset.balanceOf(address(this)).sub(preBurnLiquidityAssetBal);\n        IStakeLocker(stakeLocker).updateLosses(bptsBurned);  // Update StakeLockerFDT loss accounting for BPTs\n    }\n\n    /**\n        @dev    Calculates portions of claim from DebtLocker to be used by Pool `claim` function.\n        @param  claimInfo           [0] => Total Claimed, \n                                    [1] => Interest Claimed, \n                                    [2] => Principal Claimed, \n                                    [3] => Fee Claimed, \n                                    [4] => Excess Returned Claimed, \n                                    [5] => Amount Recovered (from Liquidation), \n                                    [6] => Default Suffered. \n        @param  delegateFee         The portion of interest (basis points) that goes to the Pool Delegate.\n        @param  stakingFee          The portion of interest (basis points) that goes to the StakeLocker.\n        @return poolDelegatePortion The total funds to send to the Pool Delegate.\n        @return stakeLockerPortion  The total funds to send to the StakeLocker.\n        @return principalClaim      The total principal claim.\n        @return interestClaim       The total interest claim.\n     */\n    function calculateClaimAndPortions(\n        uint256[7] calldata claimInfo,\n        uint256 delegateFee,\n        uint256 stakingFee\n    )\n        external\n        pure\n        returns (\n            uint256 poolDelegatePortion,\n            uint256 stakeLockerPortion,\n            uint256 principalClaim,\n            uint256 interestClaim\n        )\n    {\n        poolDelegatePortion = claimInfo[1].mul(delegateFee).div(10_000).add(claimInfo[3]);  // Pool Delegate portion of interest plus fee.\n        stakeLockerPortion  = claimInfo[1].mul(stakingFee).div(10_000);                     // StakeLocker portion of interest.\n\n        principalClaim = claimInfo[2].add(claimInfo[4]).add(claimInfo[5]);                                     // principal + excess + amountRecovered\n        interestClaim  = claimInfo[1].sub(claimInfo[1].mul(delegateFee).div(10_000)).sub(stakeLockerPortion);  // leftover interest\n    }\n\n    /**\n        @dev   Checks that the deactivation is allowed.\n        @param globals        The instance of a MapleGlobals.\n        @param principalOut   The amount of funds that are already funded to Loans.\n        @param liquidityAsset The Liquidity Asset of the Pool.\n     */\n    function validateDeactivation(IMapleGlobals globals, uint256 principalOut, address liquidityAsset) external view {\n        require(principalOut <= _convertFromUsd(globals, liquidityAsset, 100), \"P:PRINCIPAL_OUTSTANDING\");\n    }\n\n    /********************************************/\n    /*** Liquidity Provider Utility Functions ***/\n    /********************************************/\n\n    /**\n        @dev   Updates the effective deposit date based on how much new capital has been added. \n        @dev   If more capital is added, the deposit date moves closer to the current timestamp. \n        @dev   It emits a `DepositDateUpdated` event. \n        @param depositDate Storage reference to mapping of effective deposit dates.\n        @param balance     Balance of account depositing.\n        @param amt         Total deposit amount.\n        @param account     Address of account depositing.\n     */\n    function updateDepositDate(mapping(address => uint256) storage depositDate, uint256 balance, uint256 amt, address account) internal {\n        uint256 prevDate = depositDate[account];\n\n        // prevDate + (now - prevDate) * (amt / (balance + amt))\n        // NOTE: prevDate = 0 implies balance = 0, and equation reduces to now\n        uint256 newDate = (balance + amt) > 0\n            ? prevDate.add(block.timestamp.sub(prevDate).mul(amt).div(balance + amt))\n            : prevDate;\n\n        depositDate[account] = newDate;\n        emit DepositDateUpdated(account, newDate);\n    }\n\n    /**\n        @dev Performs all necessary checks for a `transferByCustodian` call. \n        @dev From and to must always be equal. \n        @param from   The address of the source of funds.\n        @param to     The address of the destination of funds.\n        @param amount The amount of funds transfer.\n     */\n    function transferByCustodianChecks(address from, address to, uint256 amount) external pure {\n        require(to == from,                 \"P:INVALID_RECEIVER\");\n        require(amount != uint256(0),       \"P:INVALID_AMT\");\n    }\n\n    /**\n        @dev  Performs all necessary checks for an `increaseCustodyAllowance` call.\n        @param custodian         The custodian where the funds will be locked to.\n        @param amount            The additional amount to custody.\n        @param newTotalAllowance The new total amount in custody, for some account.\n        @param fdtBal            The the total FDT balance of some account.\n     */\n    function increaseCustodyAllowanceChecks(address custodian, uint256 amount, uint256 newTotalAllowance, uint256 fdtBal) external pure {\n        require(custodian != address(0),     \"P:INVALID_CUSTODIAN\");\n        require(amount    != uint256(0),     \"P:INVALID_AMT\");\n        require(newTotalAllowance <= fdtBal, \"P:INSUF_BALANCE\");\n    }\n\n    /**********************************/\n    /*** Governor Utility Functions ***/\n    /**********************************/\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        @param liquidityAsset The address of Liquidity Asset that is supported by the Pool.\n        @param globals        The instance of a MapleGlobals.\n     */\n    function reclaimERC20(address token, address liquidityAsset, IMapleGlobals globals) external {\n        require(msg.sender == globals.governor(), \"P:NOT_GOV\");\n        require(token != liquidityAsset && token != address(0), \"P:INVALID_TOKEN\");\n        IERC20(token).safeTransfer(msg.sender, IERC20(token).balanceOf(address(this)));\n    }\n\n    /************************/\n    /*** Getter Functions ***/\n    /************************/\n\n    /**\n        @dev Official Balancer pool bdiv() function. Does synthetic float with 10^-18 precision.\n     */\n    function _bdiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b != 0, \"P:DIV_ZERO\");\n        uint256 c0 = a * WAD;\n        require(a == 0 || c0 / a == WAD, \"P:DIV_INTERNAL\");  // bmul overflow\n        uint256 c1 = c0 + (b / 2);\n        require(c1 >= c0, \"P:DIV_INTERNAL\");  //  badd require\n        return c1 / b;\n    }\n\n    /**\n        @dev    Calculates the value of BPT in units of Liquidity Asset. \n        @dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \n                of Liquidity Asset into the Pool and swapping back after this function is called. \n        @param  _bPool         The address of Balancer pool.\n        @param  liquidityAsset The asset used by Pool for liquidity to fund Loans.\n        @param  staker         The address that deposited BPTs to StakeLocker.\n        @param  stakeLocker    The contract that escrows the  BPTs deposited by Staker.\n        @return The USDC value of Staker BPTs.\n     */\n    function BPTVal(\n        address _bPool,\n        address liquidityAsset,\n        address staker,\n        address stakeLocker\n    ) external view returns (uint256) {\n        IBPool bPool = IBPool(_bPool);\n\n        // StakeLockerFDTs are minted 1:1 (in wei) in the StakeLocker when staking BPTs, thus representing stake amount.\n        // These are burned when withdrawing staked BPTs, thus representing the current stake amount.\n        uint256 amountStakedBPT       = IERC20(stakeLocker).balanceOf(staker);\n        uint256 totalSupplyBPT        = IERC20(_bPool).totalSupply();\n        uint256 liquidityAssetBalance = bPool.getBalance(liquidityAsset);\n        uint256 liquidityAssetWeight  = bPool.getNormalizedWeight(liquidityAsset);\n\n        // liquidityAsset value = (amountStaked/totalSupply) * (liquidityAssetBalance/liquidityAssetWeight)\n        return _bdiv(amountStakedBPT, totalSupplyBPT).mul(_bdiv(liquidityAssetBalance, liquidityAssetWeight)).div(WAD);\n    }\n\n    /**\n        @dev    Calculates Liquidity Asset swap out value of staker BPT balance escrowed in StakeLocker.\n        @param  _bPool         The Balancer pool that issues the BPTs.\n        @param  liquidityAsset The Swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  staker         The address that deposited BPTs to StakeLocker.\n        @param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n        @return liquidityAsset The swap out value of staker BPTs.\n     */\n    function getSwapOutValue(\n        address _bPool,\n        address liquidityAsset,\n        address staker,\n        address stakeLocker\n    ) public view returns (uint256) {\n        return _getSwapOutValue(_bPool, liquidityAsset, IERC20(stakeLocker).balanceOf(staker));\n    }\n\n    /**\n        @dev    Calculates Liquidity Asset swap out value of entire BPT balance escrowed in StakeLocker.\n        @param  _bPool         The Balancer pool that issues the BPTs.\n        @param  liquidityAsset The swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n        @return liquidityAsset The swap out value of StakeLocker BPTs.\n     */\n    function getSwapOutValueLocker(\n        address _bPool,\n        address liquidityAsset,\n        address stakeLocker\n    ) public view returns (uint256) {\n        return _getSwapOutValue(_bPool, liquidityAsset, IBPool(_bPool).balanceOf(stakeLocker));\n    }\n\n    function _getSwapOutValue(\n        address _bPool,\n        address liquidityAsset,\n        uint256 poolAmountIn\n    ) internal view returns (uint256) {\n        // Fetch Balancer pool token information\n        IBPool bPool            = IBPool(_bPool);\n        uint256 tokenBalanceOut = bPool.getBalance(liquidityAsset);\n        uint256 tokenWeightOut  = bPool.getDenormalizedWeight(liquidityAsset);\n        uint256 poolSupply      = bPool.totalSupply();\n        uint256 totalWeight     = bPool.getTotalDenormalizedWeight();\n        uint256 swapFee         = bPool.getSwapFee();\n\n        // Returns the amount of liquidityAsset that can be recovered from BPT burning\n        uint256 tokenAmountOut = bPool.calcSingleOutGivenPoolIn(\n            tokenBalanceOut,\n            tokenWeightOut,\n            poolSupply,\n            totalWeight,\n            poolAmountIn,\n            swapFee\n        );\n\n        // Max amount that can be swapped based on amount of liquidityAsset in the Balancer Pool\n        uint256 maxSwapOut = tokenBalanceOut.mul(bPool.MAX_OUT_RATIO()).div(WAD);\n\n        return tokenAmountOut <= maxSwapOut ? tokenAmountOut : maxSwapOut;\n    }\n\n    /**\n        @dev    Calculates BPTs required if burning BPTs for liquidityAsset, given supplied tokenAmountOutRequired. \n        @dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \n                of liquidityAsset into the pool and swapping back after this function is called.\n        @param  _bPool                       The Balancer pool that issues the BPTs.\n        @param  liquidityAsset               The swap out asset (e.g. USDC) to receive when burning BPTs.\n        @param  staker                       The address that deposited BPTs to stakeLocker.\n        @param  stakeLocker                  The contract that escrows BPTs deposited by staker.\n        @param  liquidityAssetAmountRequired The amount of liquidityAsset required to recover.\n        @return poolAmountInRequired         The required poolAmountIn.\n        @return stakerBalance                The poolAmountIn currently staked.\n     */\n    function getPoolSharesRequired(\n        address _bPool,\n        address liquidityAsset,\n        address staker,\n        address stakeLocker,\n        uint256 liquidityAssetAmountRequired\n    ) public view returns (uint256 poolAmountInRequired, uint256 stakerBalance) {\n        // Fetch Balancer pool token information.\n        IBPool bPool = IBPool(_bPool);\n\n        uint256 tokenBalanceOut = bPool.getBalance(liquidityAsset);\n        uint256 tokenWeightOut  = bPool.getDenormalizedWeight(liquidityAsset);\n        uint256 poolSupply      = bPool.totalSupply();\n        uint256 totalWeight     = bPool.getTotalDenormalizedWeight();\n        uint256 swapFee         = bPool.getSwapFee();\n\n        // Fetch amount of BPTs required to burn to receive Liquidity Asset amount required.\n        poolAmountInRequired = bPool.calcPoolInGivenSingleOut(\n            tokenBalanceOut,\n            tokenWeightOut,\n            poolSupply,\n            totalWeight,\n            liquidityAssetAmountRequired,\n            swapFee\n        );\n\n        // Fetch amount staked in StakeLocker by Staker.\n        stakerBalance = IERC20(stakeLocker).balanceOf(staker);\n    }\n\n    /**\n        @dev    Returns information on the stake requirements.\n        @param  globals                    The instance of a MapleGlobals.\n        @param  balancerPool               The address of Balancer pool.\n        @param  liquidityAsset             The address of Liquidity Asset, to be returned from swap out.\n        @param  poolDelegate               The address of Pool Delegate.\n        @param  stakeLocker                The address of StakeLocker.\n        @return swapOutAmountRequired      The minimum amount of Liquidity Asset coverage from staking required (in Liquidity Asset units).\n        @return currentPoolDelegateCover   The present amount of Liquidity Asset coverage from Pool Delegate stake (in Liquidity Asset units).\n        @return enoughStakeForFinalization Whether enough stake is present from Pool Delegate for Pool finalization.\n        @return poolAmountInRequired       The BPTs required for minimum Liquidity Asset coverage.\n        @return poolAmountPresent          The current staked BPTs.\n     */\n    function getInitialStakeRequirements(IMapleGlobals globals, address balancerPool, address liquidityAsset, address poolDelegate, address stakeLocker) external view returns (\n        uint256 swapOutAmountRequired,\n        uint256 currentPoolDelegateCover,\n        bool    enoughStakeForFinalization,\n        uint256 poolAmountInRequired,\n        uint256 poolAmountPresent\n    ) {\n        swapOutAmountRequired = _convertFromUsd(globals, liquidityAsset, globals.swapOutRequired());\n        (\n            poolAmountInRequired,\n            poolAmountPresent\n        ) = getPoolSharesRequired(balancerPool, liquidityAsset, poolDelegate, stakeLocker, swapOutAmountRequired);\n\n        currentPoolDelegateCover   = getSwapOutValue(balancerPool, liquidityAsset, poolDelegate, stakeLocker);\n        enoughStakeForFinalization = poolAmountPresent >= poolAmountInRequired;\n    }\n\n    /************************/\n    /*** Helper Functions ***/\n    /************************/\n\n    /**\n        @dev   Converts from WAD precision to Liquidity Asset precision.\n        @param amt                    The amount to convert.\n        @param liquidityAssetDecimals The Liquidity Asset decimal.\n     */\n    function fromWad(uint256 amt, uint256 liquidityAssetDecimals) external pure returns (uint256) {\n        return amt.mul(10 ** liquidityAssetDecimals).div(WAD);\n    }\n\n    /**\n        @dev    Returns Liquidity Asset in Liquidity Asset units when given integer USD (E.g., $100 = 100).\n        @param  globals        The instance of a MapleGlobals.\n        @param  liquidityAsset The Liquidity Asset of the pool.\n        @param  usdAmount      The USD amount to convert, in integer units (e.g., $100 = 100).\n        @return The usdAmount worth of Liquidity Asset, in Liquidity Asset units.\n    */\n    function _convertFromUsd(IMapleGlobals globals, address liquidityAsset, uint256 usdAmount) internal view returns (uint256) {\n        return usdAmount\n            .mul(10 ** 8)                                         // Cancel out 10 ** 8 decimals from oracle.\n            .mul(10 ** IERC20Details(liquidityAsset).decimals())  // Convert to Liquidity Asset precision.\n            .div(globals.getLatestPrice(liquidityAsset));         // Convert to Liquidity Asset value.\n    }\n\n}\n\n////// contracts/core/pool/v1/Pool.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ERC20 }             from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\"; */\n/* import { IERC20, SafeERC20 } from \"../../../../lib/openzeppelin-contracts/contracts/token/ERC20/SafeERC20.sol\"; */\n\n/* import { PoolLib } from \"../../../libraries/pool/v1/PoolLib.sol\"; */\n\n/* import { IDebtLocker }             from \"../../debt-locker/v1/interfaces/IDebtLocker.sol\"; */\n/* import { IBasicFDT }               from \"../../funds-distribution-token/v1/interfaces/IBasicFDT.sol\"; */\n/* import { IMapleGlobals }           from \"../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n/* import { ILiquidityLocker }        from \"../../liquidity-locker/v1/interfaces/ILiquidityLocker.sol\"; */\n/* import { ILiquidityLockerFactory } from \"../../liquidity-locker/v1/interfaces/ILiquidityLockerFactory.sol\"; */\n/* import { IStakeLocker }            from \"../../stake-locker/v1/interfaces/IStakeLocker.sol\"; */\n/* import { IStakeLockerFactory }     from \"../../stake-locker/v1/interfaces/IStakeLockerFactory.sol\"; */\n\n/* import { IPool }        from \"./interfaces/IPool.sol\"; */\n/* import { IPoolFactory } from \"./interfaces/IPoolFactory.sol\"; */\n\n/* import { PoolFDT } from \"./PoolFDT.sol\"; */\n\n/// @title Pool maintains all accounting and functionality related to Pools.\ncontract Pool is IPool, PoolFDT {\n\n    using SafeERC20 for IERC20;\n\n    uint256 constant WAD = 10 ** 18;\n\n    uint8 public override constant DL_FACTORY = 1;\n\n    IERC20 public override immutable liquidityAsset;\n\n    address public override immutable poolDelegate;\n    address public override immutable liquidityLocker;\n    address public override immutable stakeAsset;\n    address public override immutable stakeLocker;\n    address public override immutable superFactory;\n\n    uint256 private immutable liquidityAssetDecimals;  // The precision for the Liquidity Asset (i.e. `decimals()`).\n\n    uint256 public override           stakingFee;\n    uint256 public override immutable delegateFee;\n\n    uint256 public override principalOut;\n    uint256 public override liquidityCap;\n    uint256 public override lockupPeriod;\n\n    bool public override openToPublic;\n\n    State public override poolState;\n\n    mapping(address => uint256)                     public override depositDate;\n    mapping(address => mapping(address => address)) public override debtLockers;\n    mapping(address => bool)                        public override poolAdmins;\n    mapping(address => bool)                        public override allowedLiquidityProviders;\n    mapping(address => uint256)                     public override withdrawCooldown;\n    mapping(address => mapping(address => uint256)) public override custodyAllowance;\n    mapping(address => uint256)                     public override totalCustodyAllowance;\n\n    /**\n        Universal accounting law:\n                                       fdtTotalSupply = liquidityLockerBal + principalOut - interestSum + poolLosses\n            fdtTotalSupply + interestSum - poolLosses = liquidityLockerBal + principalOut\n    */\n\n    /**\n        @dev   Constructor for a Pool. \n        @dev   It emits a `PoolStateChanged` event. \n        @param _poolDelegate   Address that has manager privileges of the Pool.\n        @param _liquidityAsset Asset used to fund the Pool, It gets escrowed in LiquidityLocker.\n        @param _stakeAsset     Asset escrowed in StakeLocker.\n        @param _slFactory      Factory used to instantiate the StakeLocker.\n        @param _llFactory      Factory used to instantiate the LiquidityLocker.\n        @param _stakingFee     Fee that Stakers earn on interest, in basis points.\n        @param _delegateFee    Fee that the Pool Delegate earns on interest, in basis points.\n        @param _liquidityCap   Max amount of Liquidity Asset accepted by the Pool.\n        @param name            Name of Pool token.\n        @param symbol          Symbol of Pool token.\n     */\n    constructor(\n        address _poolDelegate,\n        address _liquidityAsset,\n        address _stakeAsset,\n        address _slFactory,\n        address _llFactory,\n        uint256 _stakingFee,\n        uint256 _delegateFee,\n        uint256 _liquidityCap,\n        string memory name,\n        string memory symbol\n    ) PoolFDT(name, symbol) public {\n\n        // Conduct sanity checks on Pool parameters.\n        PoolLib.poolSanityChecks(_globals(msg.sender), _liquidityAsset, _stakeAsset, _stakingFee, _delegateFee);\n\n        // Assign variables relating to the Liquidity Asset.\n        liquidityAsset         = IERC20(_liquidityAsset);\n        liquidityAssetDecimals = ERC20(_liquidityAsset).decimals();\n\n        // Assign state variables.\n        stakeAsset   = _stakeAsset;\n        poolDelegate = _poolDelegate;\n        stakingFee   = _stakingFee;\n        delegateFee  = _delegateFee;\n        superFactory = msg.sender;\n        liquidityCap = _liquidityCap;\n\n        // Instantiate the LiquidityLocker and the StakeLocker.\n        stakeLocker     = address(IStakeLockerFactory(_slFactory).newLocker(_stakeAsset, _liquidityAsset));\n        liquidityLocker = address(ILiquidityLockerFactory(_llFactory).newLocker(_liquidityAsset));\n\n        lockupPeriod = 180 days;\n\n        emit PoolStateChanged(State.Initialized);\n    }\n\n    /*******************************/\n    /*** Pool Delegate Functions ***/\n    /*******************************/\n\n    function finalize() external override {\n        _isValidDelegateAndProtocolNotPaused();\n        _isValidState(State.Initialized);\n        (,, bool stakeSufficient,,) = getInitialStakeRequirements();\n        require(stakeSufficient, \"P:INSUF_STAKE\");\n        poolState = State.Finalized;\n        emit PoolStateChanged(poolState);\n    }\n\n    function fundLoan(address loan, address dlFactory, uint256 amt) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        _isValidState(State.Finalized);\n        principalOut = principalOut.add(amt);\n        PoolLib.fundLoan(debtLockers, superFactory, liquidityLocker, loan, dlFactory, amt);\n        _emitBalanceUpdatedEvent();\n    }\n\n    function triggerDefault(address loan, address dlFactory) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        IDebtLocker(debtLockers[loan][dlFactory]).triggerDefault();\n    }\n\n    function claim(address loan, address dlFactory) external override returns (uint256[7] memory claimInfo) {\n        _whenProtocolNotPaused();\n        _isValidDelegateOrPoolAdmin();\n        claimInfo = IDebtLocker(debtLockers[loan][dlFactory]).claim();\n\n        (uint256 poolDelegatePortion, uint256 stakeLockerPortion, uint256 principalClaim, uint256 interestClaim) = PoolLib.calculateClaimAndPortions(claimInfo, delegateFee, stakingFee);\n\n        // Subtract outstanding principal by the principal claimed plus excess returned.\n        // Considers possible `principalClaim` overflow if Liquidity Asset is transferred directly into the Loan.\n        if (principalClaim <= principalOut) {\n            principalOut = principalOut - principalClaim;\n        } else {\n            interestClaim  = interestClaim.add(principalClaim - principalOut);  // Distribute `principalClaim` overflow as interest to LPs.\n            principalClaim = principalOut;                                      // Set `principalClaim` to `principalOut` so correct amount gets transferred.\n            principalOut   = 0;                                                 // Set `principalOut` to zero to avoid subtraction overflow.\n        }\n\n        // Accounts for rounding error in StakeLocker / Pool Delegate / LiquidityLocker interest split.\n        interestSum = interestSum.add(interestClaim);\n\n        _transferLiquidityAsset(poolDelegate, poolDelegatePortion);  // Transfer the fee and portion of interest to the Pool Delegate.\n        _transferLiquidityAsset(stakeLocker,  stakeLockerPortion);   // Transfer the portion of interest to the StakeLocker.\n\n        // Transfer remaining claim (remaining interest + principal + excess + recovered) to the LiquidityLocker.\n        // Dust will accrue in the Pool, but this ensures that state variables are in sync with the LiquidityLocker balance updates.\n        // Not using `balanceOf` in case of external address transferring the Liquidity Asset directly into Pool.\n        // Ensures that internal accounting is exactly reflective of balance change.\n        _transferLiquidityAsset(liquidityLocker, principalClaim.add(interestClaim));\n\n        // Handle default if defaultSuffered > 0.\n        if (claimInfo[6] > 0) _handleDefault(loan, claimInfo[6]);\n\n        // Update funds received for StakeLockerFDTs.\n        IStakeLocker(stakeLocker).updateFundsReceived();\n\n        // Update funds received for PoolFDTs.\n        updateFundsReceived();\n\n        _emitBalanceUpdatedEvent();\n        emit BalanceUpdated(stakeLocker, address(liquidityAsset), liquidityAsset.balanceOf(stakeLocker));\n\n        emit Claim(loan, interestClaim, principalClaim, claimInfo[3], stakeLockerPortion, poolDelegatePortion);\n    }\n\n    /**\n        @dev   Handles if a claim has been made and there is a non-zero defaultSuffered amount. \n        @dev   It emits a `DefaultSuffered` event. \n        @param loan            The address of a Loan that has defaulted.\n        @param defaultSuffered The losses suffered from default after liquidation.\n     */\n    function _handleDefault(address loan, uint256 defaultSuffered) internal {\n\n        (uint256 bptsBurned, uint256 postBurnBptBal, uint256 liquidityAssetRecoveredFromBurn) = PoolLib.handleDefault(liquidityAsset, stakeLocker, stakeAsset, defaultSuffered);\n\n        // If BPT burn is not enough to cover full default amount, pass on losses to LPs with PoolFDT loss accounting.\n        if (defaultSuffered > liquidityAssetRecoveredFromBurn) {\n            poolLosses = poolLosses.add(defaultSuffered - liquidityAssetRecoveredFromBurn);\n            updateLossesReceived();\n        }\n\n        // Transfer Liquidity Asset from burn to LiquidityLocker.\n        liquidityAsset.safeTransfer(liquidityLocker, liquidityAssetRecoveredFromBurn);\n\n        principalOut = principalOut.sub(defaultSuffered);  // Subtract rest of the Loan's principal from `principalOut`.\n\n        emit DefaultSuffered(\n            loan,                            // The Loan that suffered the default.\n            defaultSuffered,                 // Total default suffered from the Loan by the Pool after liquidation.\n            bptsBurned,                      // Amount of BPTs burned from StakeLocker.\n            postBurnBptBal,                  // Remaining BPTs in StakeLocker post-burn.\n            liquidityAssetRecoveredFromBurn  // Amount of Liquidity Asset recovered from burning BPTs.\n        );\n    }\n\n    function deactivate() external override {\n        _isValidDelegateAndProtocolNotPaused();\n        _isValidState(State.Finalized);\n        PoolLib.validateDeactivation(_globals(superFactory), principalOut, address(liquidityAsset));\n        poolState = State.Deactivated;\n        emit PoolStateChanged(poolState);\n    }\n\n    /**************************************/\n    /*** Pool Delegate Setter Functions ***/\n    /**************************************/\n\n    function setLiquidityCap(uint256 newLiquidityCap) external override {\n        _whenProtocolNotPaused();\n        _isValidDelegateOrPoolAdmin();\n        liquidityCap = newLiquidityCap;\n        emit LiquidityCapSet(newLiquidityCap);\n    }\n\n    function setLockupPeriod(uint256 newLockupPeriod) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        require(newLockupPeriod <= lockupPeriod, \"P:BAD_VALUE\");\n        lockupPeriod = newLockupPeriod;\n        emit LockupPeriodSet(newLockupPeriod);\n    }\n\n    function setStakingFee(uint256 newStakingFee) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        require(newStakingFee.add(delegateFee) <= 10_000, \"P:BAD_FEE\");\n        stakingFee = newStakingFee;\n        emit StakingFeeSet(newStakingFee);\n    }\n\n    function setAllowList(address account, bool status) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        allowedLiquidityProviders[account] = status;\n        emit LPStatusChanged(account, status);\n    }\n\n    function setPoolAdmin(address poolAdmin, bool allowed) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        poolAdmins[poolAdmin] = allowed;\n        emit PoolAdminSet(poolAdmin, allowed);\n    }\n\n    function setOpenToPublic(bool open) external override {\n        _isValidDelegateAndProtocolNotPaused();\n        openToPublic = open;\n        emit PoolOpenedToPublic(open);\n    }\n\n    /************************************/\n    /*** Liquidity Provider Functions ***/\n    /************************************/\n\n    function deposit(uint256 amt) external override {\n        _whenProtocolNotPaused();\n        _isValidState(State.Finalized);\n        require(isDepositAllowed(amt), \"P:DEP_NOT_ALLOWED\");\n\n        withdrawCooldown[msg.sender] = uint256(0);  // Reset the LP's withdraw cooldown if they had previously intended to withdraw.\n\n        uint256 wad = _toWad(amt);\n        PoolLib.updateDepositDate(depositDate, balanceOf(msg.sender), wad, msg.sender);\n\n        liquidityAsset.safeTransferFrom(msg.sender, liquidityLocker, amt);\n        _mint(msg.sender, wad);\n\n        _emitBalanceUpdatedEvent();\n        emit Cooldown(msg.sender, uint256(0));\n    }\n\n    function intendToWithdraw() external override {\n        require(balanceOf(msg.sender) != uint256(0), \"P:ZERO_BAL\");\n        withdrawCooldown[msg.sender] = block.timestamp;\n        emit Cooldown(msg.sender, block.timestamp);\n    }\n\n    function cancelWithdraw() external override {\n        require(withdrawCooldown[msg.sender] != uint256(0), \"P:NOT_WITHDRAWING\");\n        withdrawCooldown[msg.sender] = uint256(0);\n        emit Cooldown(msg.sender, uint256(0));\n    }\n\n    /**\n        @dev   Checks that the account can withdraw an amount.\n        @param account The address of the account.\n        @param wad     The amount to withdraw.\n     */\n    function _canWithdraw(address account, uint256 wad) internal view {\n        require(depositDate[account].add(lockupPeriod) <= block.timestamp,     \"P:FUNDS_LOCKED\");     // Restrict withdrawal during lockup period\n        require(balanceOf(account).sub(wad) >= totalCustodyAllowance[account], \"P:INSUF_TRANS_BAL\");  // Account can only withdraw tokens that aren't custodied\n    }\n\n    function withdraw(uint256 amt) external override {\n        _whenProtocolNotPaused();\n        uint256 wad = _toWad(amt);\n        (uint256 lpCooldownPeriod, uint256 lpWithdrawWindow) = _globals(superFactory).getLpCooldownParams();\n\n        _canWithdraw(msg.sender, wad);\n        require((block.timestamp - (withdrawCooldown[msg.sender] + lpCooldownPeriod)) <= lpWithdrawWindow, \"P:WITHDRAW_NOT_ALLOWED\");\n\n        _burn(msg.sender, wad);  // Burn the corresponding PoolFDTs balance.\n        withdrawFunds();         // Transfer full entitled interest, decrement `interestSum`.\n\n        // Transfer amount that is due after realized losses are accounted for.\n        // Recognized losses are absorbed by the LP.\n        _transferLiquidityLockerFunds(msg.sender, amt.sub(_recognizeLosses()));\n\n        _emitBalanceUpdatedEvent();\n    }\n\n    /**\n        @dev   Transfers PoolFDTs.\n        @param from Th address  sending   PoolFDTs.\n        @param to   The address receiving PoolFDTs.\n        @param wad  The amount of PoolFDTs to transfer.\n     */\n    function _transfer(address from, address to, uint256 wad) internal override {\n        _whenProtocolNotPaused();\n\n        (uint256 lpCooldownPeriod, uint256 lpWithdrawWindow) = _globals(superFactory).getLpCooldownParams();\n\n        _canWithdraw(from, wad);\n        require(block.timestamp > (withdrawCooldown[to] + lpCooldownPeriod + lpWithdrawWindow), \"P:TO_NOT_ALLOWED\");  // Recipient must not be currently withdrawing.\n        require(recognizableLossesOf(from) == uint256(0),                                       \"P:RECOG_LOSSES\");    // If an LP has unrecognized losses, they must recognize losses using `withdraw`.\n\n        PoolLib.updateDepositDate(depositDate, balanceOf(to), wad, to);\n        super._transfer(from, to, wad);\n    }\n\n    function withdrawFunds() public override(IPool, IBasicFDT) {\n        _whenProtocolNotPaused();\n        uint256 withdrawableFunds = _prepareWithdraw();\n\n        if (withdrawableFunds == uint256(0)) return;\n\n        _transferLiquidityLockerFunds(msg.sender, withdrawableFunds);\n        _emitBalanceUpdatedEvent();\n\n        interestSum = interestSum.sub(withdrawableFunds);\n\n        _updateFundsTokenBalance();\n    }\n\n    function increaseCustodyAllowance(address custodian, uint256 amount) external override {\n        uint256 oldAllowance      = custodyAllowance[msg.sender][custodian];\n        uint256 newAllowance      = oldAllowance.add(amount);\n        uint256 newTotalAllowance = totalCustodyAllowance[msg.sender].add(amount);\n\n        PoolLib.increaseCustodyAllowanceChecks(custodian, amount, newTotalAllowance, balanceOf(msg.sender));\n\n        custodyAllowance[msg.sender][custodian] = newAllowance;\n        totalCustodyAllowance[msg.sender]       = newTotalAllowance;\n        emit CustodyAllowanceChanged(msg.sender, custodian, oldAllowance, newAllowance);\n        emit TotalCustodyAllowanceUpdated(msg.sender, newTotalAllowance);\n    }\n\n    function transferByCustodian(address from, address to, uint256 amount) external override {\n        uint256 oldAllowance = custodyAllowance[from][msg.sender];\n        uint256 newAllowance = oldAllowance.sub(amount);\n\n        PoolLib.transferByCustodianChecks(from, to, amount);\n\n        custodyAllowance[from][msg.sender] = newAllowance;\n        uint256 newTotalAllowance          = totalCustodyAllowance[from].sub(amount);\n        totalCustodyAllowance[from]        = newTotalAllowance;\n        emit CustodyTransfer(msg.sender, from, to, amount);\n        emit CustodyAllowanceChanged(from, msg.sender, oldAllowance, newAllowance);\n        emit TotalCustodyAllowanceUpdated(msg.sender, newTotalAllowance);\n    }\n\n    /**************************/\n    /*** Governor Functions ***/\n    /**************************/\n\n    function reclaimERC20(address token) external override {\n        PoolLib.reclaimERC20(token, address(liquidityAsset), _globals(superFactory));\n    }\n\n    /*************************/\n    /*** Getter Functions ***/\n    /*************************/\n\n    function BPTVal(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker\n    ) external override view returns (uint256) {\n        return PoolLib.BPTVal(_bPool, _liquidityAsset, _staker, _stakeLocker);\n    }\n\n    function isDepositAllowed(uint256 depositAmt) public override view returns (bool) {\n        return (openToPublic || allowedLiquidityProviders[msg.sender]) &&\n               _balanceOfLiquidityLocker().add(principalOut).add(depositAmt) <= liquidityCap;\n    }\n\n    function getInitialStakeRequirements() public override view returns (uint256, uint256, bool, uint256, uint256) {\n        return PoolLib.getInitialStakeRequirements(_globals(superFactory), stakeAsset, address(liquidityAsset), poolDelegate, stakeLocker);\n    }\n\n    function getPoolSharesRequired(\n        address _bPool,\n        address _liquidityAsset,\n        address _staker,\n        address _stakeLocker,\n        uint256 _liquidityAssetAmountRequired\n    ) external override view returns (uint256, uint256) {\n        return PoolLib.getPoolSharesRequired(_bPool, _liquidityAsset, _staker, _stakeLocker, _liquidityAssetAmountRequired);\n    }\n\n    function isPoolFinalized() external override view returns (bool) {\n        return poolState == State.Finalized;\n    }\n\n    /************************/\n    /*** Helper Functions ***/\n    /************************/\n\n    /**\n        @dev   Converts to WAD precision.\n        @param amt The amount to convert.\n     */\n    function _toWad(uint256 amt) internal view returns (uint256) {\n        return amt.mul(WAD).div(10 ** liquidityAssetDecimals);\n    }\n\n    /**\n        @dev    Returns the balance of this Pool's LiquidityLocker.\n        @return The balance of LiquidityLocker.\n     */\n    function _balanceOfLiquidityLocker() internal view returns (uint256) {\n        return liquidityAsset.balanceOf(liquidityLocker);\n    }\n\n    /**\n        @dev   Checks that the current state of Pool matches the provided state.\n        @param _state A Pool state.\n     */\n    function _isValidState(State _state) internal view {\n        require(poolState == _state, \"P:BAD_STATE\");\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate.\n     */\n    function _isValidDelegate() internal view {\n        require(msg.sender == poolDelegate, \"P:NOT_DEL\");\n    }\n\n    /**\n        @dev Returns the MapleGlobals instance.\n     */\n    function _globals(address poolFactory) internal view returns (IMapleGlobals) {\n        return IMapleGlobals(IPoolFactory(poolFactory).globals());\n    }\n\n    /**\n        @dev Emits a `BalanceUpdated` event for LiquidityLocker. \n        @dev It emits a `BalanceUpdated` event. \n     */\n    function _emitBalanceUpdatedEvent() internal {\n        emit BalanceUpdated(liquidityLocker, address(liquidityAsset), _balanceOfLiquidityLocker());\n    }\n\n    /**\n        @dev   Transfers Liquidity Asset to given `to` address, from self (i.e. `address(this)`).\n        @param to    The address to transfer liquidityAsset.\n        @param value The amount of liquidity asset that gets transferred.\n     */\n    function _transferLiquidityAsset(address to, uint256 value) internal {\n        liquidityAsset.safeTransfer(to, value);\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate or a Pool Admin.\n     */\n    function _isValidDelegateOrPoolAdmin() internal view {\n        require(msg.sender == poolDelegate || poolAdmins[msg.sender], \"P:NOT_DEL_OR_ADMIN\");\n    }\n\n    /**\n        @dev Checks that the protocol is not in a paused state.\n     */\n    function _whenProtocolNotPaused() internal view {\n        require(!_globals(superFactory).protocolPaused(), \"P:PROTO_PAUSED\");\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Pool Delegate and that the protocol is not in a paused state.\n     */\n    function _isValidDelegateAndProtocolNotPaused() internal view {\n        _isValidDelegate();\n        _whenProtocolNotPaused();\n    }\n\n    function _transferLiquidityLockerFunds(address to, uint256 value) internal {\n        ILiquidityLocker(liquidityLocker).transfer(to, value);\n    }\n\n}\n\n////// lib/openzeppelin-contracts/contracts/utils/Pausable.sol\n/* pragma solidity >=0.6.0 <0.8.0; */\n\n/* import \"../GSN/Context.sol\"; */\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    bool private _paused;\n\n    /**\n     * @dev Initializes the contract in unpaused state.\n     */\n    constructor () internal {\n        _paused = false;\n    }\n\n    /**\n     * @dev Returns true if the contract is paused, and false otherwise.\n     */\n    function paused() public view returns (bool) {\n        return _paused;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is not paused.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    modifier whenNotPaused() {\n        require(!_paused, \"Pausable: paused\");\n        _;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is paused.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    modifier whenPaused() {\n        require(_paused, \"Pausable: not paused\");\n        _;\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual whenNotPaused {\n        _paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual whenPaused {\n        _paused = false;\n        emit Unpaused(_msgSender());\n    }\n}\n\n////// contracts/core/pool/v1/PoolFactory.sol\n/* pragma solidity 0.6.11; */\n\n/* import { Pausable } from \"../../../../lib/openzeppelin-contracts/contracts/utils/Pausable.sol\"; */\n\n/* import { IMapleGlobals } from \"../../globals/v1/interfaces/IMapleGlobals.sol\"; */\n\n/* import { IPoolFactory } from \"./interfaces/IPoolFactory.sol\"; */\n\n/* import { Pool } from \"./Pool.sol\"; */\n\n/// @title PoolFactory instantiates Pools.\ncontract PoolFactory is IPoolFactory, Pausable {\n\n    uint8 public override constant LL_FACTORY = 3;\n    uint8 public override constant SL_FACTORY = 4;\n\n    uint256 public override poolsCreated;\n    IMapleGlobals public override globals;\n\n    mapping(uint256 => address) public override pools;\n    mapping(address => bool)    public override isPool;             // True only if a Pool was instantiated by this factory.\n    mapping(address => bool)    public override poolFactoryAdmins;\n\n    constructor(address _globals) public {\n        globals = IMapleGlobals(_globals);\n    }\n\n    function setGlobals(address newGlobals) external override {\n        _isValidGovernor();\n        globals = IMapleGlobals(newGlobals);\n    }\n\n    function createPool(\n        address liquidityAsset,\n        address stakeAsset,\n        address slFactory,\n        address llFactory,\n        uint256 stakingFee,\n        uint256 delegateFee,\n        uint256 liquidityCap\n    ) external override whenNotPaused returns (address poolAddress) {\n        _whenProtocolNotPaused();\n        {\n            IMapleGlobals _globals = globals;\n            require(_globals.isValidSubFactory(address(this), llFactory, LL_FACTORY), \"PF:INVALID_LLF\");\n            require(_globals.isValidSubFactory(address(this), slFactory, SL_FACTORY), \"PF:INVALID_SLF\");\n            require(_globals.isValidPoolDelegate(msg.sender),                         \"PF:NOT_DELEGATE\");\n        }\n\n        string memory name   = \"Maple Pool Token\";\n        string memory symbol = \"MPL-LP\";\n\n        Pool pool =\n            new Pool(\n                msg.sender,\n                liquidityAsset,\n                stakeAsset,\n                slFactory,\n                llFactory,\n                stakingFee,\n                delegateFee,\n                liquidityCap,\n                name,\n                symbol\n            );\n\n        poolAddress         = address(pool);\n        pools[poolsCreated] = poolAddress;\n        isPool[poolAddress] = true;\n        ++poolsCreated;\n\n        emit PoolCreated(\n            poolAddress,\n            msg.sender,\n            liquidityAsset,\n            stakeAsset,\n            pool.liquidityLocker(),\n            pool.stakeLocker(),\n            stakingFee,\n            delegateFee,\n            liquidityCap,\n            name,\n            symbol\n        );\n    }\n\n    function setPoolFactoryAdmin(address poolFactoryAdmin, bool allowed) external override {\n        _isValidGovernor();\n        poolFactoryAdmins[poolFactoryAdmin] = allowed;\n        emit PoolFactoryAdminSet(poolFactoryAdmin, allowed);\n    }\n\n    function pause() external override {\n        _isValidGovernorOrPoolFactoryAdmin();\n        super._pause();\n    }\n\n    function unpause() external override {\n        _isValidGovernorOrPoolFactoryAdmin();\n        super._unpause();\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Governor.\n     */\n    function _isValidGovernor() internal view {\n        require(msg.sender == globals.governor(), \"PF:NOT_GOV\");\n    }\n\n    /**\n        @dev Checks that `msg.sender` is the Governor or a PoolFactory Admin.\n     */\n    function _isValidGovernorOrPoolFactoryAdmin() internal view {\n        require(msg.sender == globals.governor() || poolFactoryAdmins[msg.sender], \"PF:NOT_GOV_OR_ADMIN\");\n    }\n\n    /**\n        @dev Checks that the protocol is not in a paused state.\n     */\n    function _whenProtocolNotPaused() internal view {\n        require(!globals.protocolPaused(), \"PF:PROTO_PAUSED\");\n    }\n\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/core/pool/v1/PoolFactory.sol": {
        "Address": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204281e2eeaf29ccfaccbdd156db57b8a72b2fa2546e276f6d8fbd5fe50438f27f64736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP DUP2 0xE2 0xEE 0xAF 0x29 0xCC STATICCALL 0xCC 0xBD 0xD1 JUMP 0xDB JUMPI 0xB8 0xA7 0x2B 0x2F LOG2 SLOAD PUSH15 0x276F6D8FBD5FE50438F27F64736F6C PUSH4 0x4300060B STOP CALLER ",
              "sourceMap": "136710:6704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204281e2eeaf29ccfaccbdd156db57b8a72b2fa2546e276f6d8fbd5fe50438f27f64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP DUP2 0xE2 0xEE 0xAF 0x29 0xCC STATICCALL 0xCC 0xBD 0xD1 JUMP 0xDB JUMPI 0xB8 0xA7 0x2B 0x2F LOG2 SLOAD PUSH15 0x276F6D8FBD5FE50438F27F64736F6C PUSH4 0x4300060B STOP CALLER ",
              "sourceMap": "136710:6704:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "BasicFDT": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "Context": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          }
        },
        "ERC20": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "60806040523480156200001157600080fd5b5060405162000ca538038062000ca5833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405250508251620001b491506003906020850190620001e0565b508051620001ca906004906020840190620001e0565b50506005805460ff191660121790555062000285565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022357805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025357825182559160200191906001019062000236565b506200026192915062000265565b5090565b6200028291905b808211156200026157600081556001016200026c565b90565b610a1080620002956000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60025490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610945602891396001600160a01b038a166000908152600160205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107dc16565b610589565b5060019392505050565b60055460ff1690565b6000610363610415610585565b846103f08560016000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087316565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b6602591396001600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107dc16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109926024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108fd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096d6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108da6023913960400191505060405180910390fd5b61070a8383836108d4565b61074d8160405180606001604052806026815260200161091f602691396001600160a01b038616600090815260208190526040902054919063ffffffff6107dc16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610782908263ffffffff61087316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610830578181015183820152602001610818565b50505050905090810190601f16801561085d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220de11bafcbac025dade4883e6b08ae107985e3a7d08d94210568160f1d8db84a564736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xCA5 CODESIZE SUB DUP1 PUSH3 0xCA5 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9E JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE6 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x150 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x198 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP DUP3 MLOAD PUSH3 0x1B4 SWAP2 POP PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x1E0 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x1CA SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x1E0 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH3 0x285 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x223 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x253 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x253 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x253 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x236 JUMP JUMPDEST POP PUSH3 0x261 SWAP3 SWAP2 POP PUSH3 0x265 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x282 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x261 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x26C JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0xA10 DUP1 PUSH3 0x295 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x408 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x45C JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x477 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x55A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x3F5 DUP5 PUSH2 0x38B PUSH2 0x585 JUMP JUMPDEST PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x945 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x415 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x426 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4E5 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x50F PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x553 PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x992 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x613 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8FD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x96D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DA PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x70A DUP4 DUP4 DUP4 PUSH2 0x8D4 JUMP JUMPDEST PUSH2 0x74D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x91F PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x782 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x86B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x830 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x818 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x85D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220DE11 0xBA 0xFC 0xBA 0xC0 0x25 0xDA 0xDE 0x48 DUP4 0xE6 0xB0 DUP11 0xE1 SMOD SWAP9 0x5E GASPRICE PUSH30 0x8D94210568160F1D8DB84A564736F6C634300060B003300000000000000 ",
              "sourceMap": "35404:9426:0:-:0;;;36041:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36041:145:0;;;;;;;;;;-1:-1:-1;36041:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36041:145:0;;;;;;;;;;-1:-1:-1;36041:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36041:145:0;;-1:-1:-1;;36115:13:0;;;;-1:-1:-1;36115:5:0;;:13;;;;;:::i;:::-;-1:-1:-1;36138:17:0;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;36165:9:0;:14;;-1:-1:-1;;36165:14:0;36177:2;36165:14;;;-1:-1:-1;35404:9426:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35404:9426:0;;;-1:-1:-1;35404:9426:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c8063395093511161007157806339509351146101d957806370a082311461020557806395d89b411461022b578063a457c2d714610233578063a9059cbb1461025f578063dd62ed3e1461028b576100a9565b806306fdde03146100ae578063095ea7b31461012b57806318160ddd1461016b57806323b872dd14610185578063313ce567146101bb575b600080fd5b6100b66102b9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156100f05781810151838201526020016100d8565b50505050905090810190601f16801561011d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101576004803603604081101561014157600080fd5b506001600160a01b03813516906020013561034f565b604080519115158252519081900360200190f35b61017361036c565b60408051918252519081900360200190f35b6101576004803603606081101561019b57600080fd5b506001600160a01b03813581169160208101359091169060400135610372565b6101c36103ff565b6040805160ff9092168252519081900360200190f35b610157600480360360408110156101ef57600080fd5b506001600160a01b038135169060200135610408565b6101736004803603602081101561021b57600080fd5b50356001600160a01b031661045c565b6100b6610477565b6101576004803603604081101561024957600080fd5b506001600160a01b0381351690602001356104d8565b6101576004803603604081101561027557600080fd5b506001600160a01b038135169060200135610546565b610173600480360360408110156102a157600080fd5b506001600160a01b038135811691602001351661055a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061036361035c610585565b8484610589565b50600192915050565b60025490565b600061037f848484610675565b6103f58461038b610585565b6103f085604051806060016040528060288152602001610945602891396001600160a01b038a166000908152600160205260408120906103c9610585565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6107dc16565b610589565b5060019392505050565b60055460ff1690565b6000610363610415610585565b846103f08560016000610426610585565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61087316565b6001600160a01b031660009081526020819052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103455780601f1061031a57610100808354040283529160200191610345565b60006103636104e5610585565b846103f0856040518060600160405280602581526020016109b6602591396001600061050f610585565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6107dc16565b6000610363610553610585565b8484610675565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166105ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806109926024913960400191505060405180910390fd5b6001600160a01b0382166106135760405162461bcd60e51b81526004018080602001828103825260228152602001806108fd6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166106ba5760405162461bcd60e51b815260040180806020018281038252602581526020018061096d6025913960400191505060405180910390fd5b6001600160a01b0382166106ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806108da6023913960400191505060405180910390fd5b61070a8383836108d4565b61074d8160405180606001604052806026815260200161091f602691396001600160a01b038616600090815260208190526040902054919063ffffffff6107dc16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610782908263ffffffff61087316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561086b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610830578181015183820152602001610818565b50505050905090810190601f16801561085d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156108cd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220de11bafcbac025dade4883e6b08ae107985e3a7d08d94210568160f1d8db84a564736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1D9 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x28B JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1BB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xF0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x11D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x141 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH2 0x36C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x19B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x372 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3FF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x408 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x45C JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x477 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x4D8 JUMP JUMPDEST PUSH2 0x157 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x546 JUMP JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x55A JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x328 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x35C PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F DUP5 DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH2 0x3F5 DUP5 PUSH2 0x38B PUSH2 0x585 JUMP JUMPDEST PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x945 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x3C9 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x415 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x426 PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x345 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x31A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x4E5 PUSH2 0x585 JUMP JUMPDEST DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B6 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x50F PUSH2 0x585 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x363 PUSH2 0x553 PUSH2 0x585 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x675 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5CE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x992 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x613 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8FD PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x6BA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x96D PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x6FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8DA PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x70A DUP4 DUP4 DUP4 PUSH2 0x8D4 JUMP JUMPDEST PUSH2 0x74D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x91F PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x7DC AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x782 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x873 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x86B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x830 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x818 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x85D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E636545524332303A20747261 PUSH15 0x736665722066726F6D20746865207A PUSH6 0x726F20616464 PUSH19 0x65737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220DE11 0xBA 0xFC 0xBA 0xC0 0x25 0xDA 0xDE 0x48 DUP4 0xE6 0xB0 DUP11 0xE1 SMOD SWAP9 0x5E GASPRICE PUSH30 0x8D94210568160F1D8DB84A564736F6C634300060B003300000000000000 ",
              "sourceMap": "35404:9426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36251:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38287:166;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38287:166:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;37294:98;;;:::i;:::-;;;;;;;;;;;;;;;;38920:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38920:317:0;;;;;;;;;;;;;;;;;:::i;37153:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39632:215;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39632:215:0;;;;;;;;:::i;37450:117::-;;;;;;;;;;;;;;;;-1:-1:-1;37450:117:0;-1:-1:-1;;;;;37450:117:0;;:::i;36445:85::-;;;:::i;40334:266::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40334:266:0;;;;;;;;:::i;37770:172::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37770:172:0;;;;;;;;:::i;38000:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38000:149:0;;;;;;;;;;:::i;36251:81::-;36320:5;36313:12;;;;;;;;-1:-1:-1;;36313:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36288:13;;36313:12;;36320:5;;36313:12;;36320:5;36313:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36251:81;:::o;38287:166::-;38370:4;38386:39;38395:12;:10;:12::i;:::-;38409:7;38418:6;38386:8;:39::i;:::-;-1:-1:-1;38442:4:0;38287:166;;;;:::o;37294:98::-;37373:12;;37294:98;:::o;38920:317::-;39026:4;39042:36;39052:6;39060:9;39071:6;39042:9;:36::i;:::-;39088:121;39097:6;39105:12;:10;:12::i;:::-;39119:89;39157:6;39119:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39119:19:0;;;;;;:11;:19;;;;;;39139:12;:10;:12::i;:::-;-1:-1:-1;;;;;39119:33:0;;;;;;;;;;;;-1:-1:-1;39119:33:0;;;:89;;:37;:89;:::i;:::-;39088:8;:121::i;:::-;-1:-1:-1;39226:4:0;38920:317;;;;;:::o;37153:81::-;37218:9;;;;37153:81;:::o;39632:215::-;39720:4;39736:83;39745:12;:10;:12::i;:::-;39759:7;39768:50;39807:10;39768:11;:25;39780:12;:10;:12::i;:::-;-1:-1:-1;;;;;39768:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;39768:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;37450:117::-;-1:-1:-1;;;;;37542:18:0;37516:7;37542:18;;;;;;;;;;;;37450:117::o;36445:85::-;36516:7;36509:14;;;;;;;;-1:-1:-1;;36509:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36484:13;;36509:14;;36516:7;;36509:14;;36516:7;36509:14;;;;;;;;;;;;;;;;;;;;;;;;40334:266;40427:4;40443:129;40452:12;:10;:12::i;:::-;40466:7;40475:96;40514:15;40475:96;;;;;;;;;;;;;;;;;:11;:25;40487:12;:10;:12::i;:::-;-1:-1:-1;;;;;40475:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;40475:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;37770:172::-;37856:4;37872:42;37882:12;:10;:12::i;:::-;37896:9;37907:6;37872:9;:42::i;38000:149::-;-1:-1:-1;;;;;38115:18:0;;;38089:7;38115:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;38000:149::o;33684:104::-;33771:10;33684:104;:::o;43398:340::-;-1:-1:-1;;;;;43499:19:0;;43491:68;;;;-1:-1:-1;;;43491:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43577:21:0;;43569:68;;;;-1:-1:-1;;;43569:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43648:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;43699:32;;;;;;;;;;;;;;;;;43398:340;;;:::o;41074:530::-;-1:-1:-1;;;;;41179:20:0;;41171:70;;;;-1:-1:-1;;;41171:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41259:23:0;;41251:71;;;;-1:-1:-1;;;41251:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41333:47;41354:6;41362:9;41373:6;41333:20;:47::i;:::-;41411:71;41433:6;41411:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41411:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;41391:17:0;;;:9;:17;;;;;;;;;;;:91;;;;41515:20;;;;;;;:32;;41540:6;41515:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;41492:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;41562:35;;;;;;;41492:20;;41562:35;;;;;;;;;;;;;41074:530;;;:::o;26888:187::-;26974:7;27009:12;27001:6;;;;26993:29;;;;-1:-1:-1;;;26993:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27044:5:0;;;26888:187::o;26016:176::-;26074:7;26105:5;;;26128:6;;;;26120:46;;;;;-1:-1:-1;;;26120:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26184:1;26016:176;-1:-1:-1;;;26016:176:0:o;44736:92::-;;;;:::o"
            },
            "methodIdentifiers": {
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          }
        },
        "ExtendedFDT": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "updateLossesReceived",
              "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",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "name()": "06fdde03",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IBPool": {
          "abi": [
            {
              "inputs": [],
              "name": "INIT_POOL_SUPPLY",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "MAX_OUT_RATIO",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "bind",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenBalanceOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenWeightOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalWeight",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenAmountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "swapFee",
                  "type": "uint256"
                }
              ],
              "name": "calcPoolInGivenSingleOut",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenBalanceOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenWeightOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolSupply",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalWeight",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolAmountIn",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "swapFee",
                  "type": "uint256"
                }
              ],
              "name": "calcSingleOutGivenPoolIn",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenAmountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "maxPoolAmountIn",
                  "type": "uint256"
                }
              ],
              "name": "exitswapExternAmountOut",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "poolAmountIn",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "finalize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "getBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "getDenormalizedWeight",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getFinalTokens",
              "outputs": [
                {
                  "internalType": "address[]",
                  "name": "",
                  "type": "address[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "getNormalizedWeight",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getNumTokens",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getSwapFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getTotalDenormalizedWeight",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "gulp",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "isBound",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "isFinalized",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "poolAmountOut",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256[]",
                  "name": "maxAmountsIn",
                  "type": "uint256[]"
                }
              ],
              "name": "joinPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "INIT_POOL_SUPPLY()": "9381cd2b",
              "MAX_OUT_RATIO()": "992e2a92",
              "balanceOf(address)": "70a08231",
              "bind(address,uint256,uint256)": "e4e1e538",
              "calcPoolInGivenSingleOut(uint256,uint256,uint256,uint256,uint256,uint256)": "82f652ad",
              "calcSingleOutGivenPoolIn(uint256,uint256,uint256,uint256,uint256,uint256)": "89298012",
              "exitswapExternAmountOut(address,uint256,uint256)": "02c96748",
              "finalize()": "4bb278f3",
              "getBalance(address)": "f8b2cb4f",
              "getDenormalizedWeight(address)": "948d8ce6",
              "getFinalTokens()": "be3bbd2e",
              "getNormalizedWeight(address)": "f1b8a9b7",
              "getNumTokens()": "cd2ed8fb",
              "getSwapFee()": "d4cadf68",
              "getTotalDenormalizedWeight()": "936c3477",
              "gulp(address)": "8c28cbe8",
              "isBound(address)": "2f37b624",
              "isFinalized()": "8d4e4083",
              "joinPool(uint256,uint256[])": "4f69c0d4",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb"
            }
          }
        },
        "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"
            }
          }
        },
        "IDebtLocker": {
          "abi": [
            {
              "inputs": [],
              "name": "claim",
              "outputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "",
                  "type": "uint256[7]"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastAmountRecovered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastDefaultSuffered",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastExcessReturned",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastFeePaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastInterestPaid",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lastPrincipalPaid",
              "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": [],
              "name": "loan",
              "outputs": [
                {
                  "internalType": "contract ILoan",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "claim()": "4e71d92d",
              "lastAmountRecovered()": "f5396d96",
              "lastDefaultSuffered()": "3dedc1b0",
              "lastExcessReturned()": "b2644fbc",
              "lastFeePaid()": "e77601b9",
              "lastInterestPaid()": "2de520d7",
              "lastPrincipalPaid()": "6cb249a6",
              "liquidityAsset()": "209b2bca",
              "loan()": "d285b7b4",
              "pool()": "16f0115b",
              "triggerDefault()": "175f8329"
            }
          }
        },
        "IDebtLockerFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                }
              ],
              "name": "DebtLockerCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                }
              ],
              "name": "isLocker",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                }
              ],
              "name": "newLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                }
              ],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55",
              "isLocker(address)": "2ec63d7c",
              "newLocker(address)": "19eb783a",
              "owner(address)": "666e1b39"
            }
          }
        },
        "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"
            }
          }
        },
        "IERC20Details": {
          "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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",
              "decimals()": "313ce567",
              "name()": "06fdde03",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd"
            }
          }
        },
        "IExtendedFDT": {
          "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": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "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": "updateLossesReceived",
              "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",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "ILiquidityLocker": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "dst",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "transfer",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "fundLoan(address,address,uint256)": "1aa37cec",
              "liquidityAsset()": "209b2bca",
              "pool()": "16f0115b",
              "transfer(address,uint256)": "a9059cbb"
            }
          }
        },
        "ILiquidityLockerFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "LiquidityLockerCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                }
              ],
              "name": "isLocker",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "newLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                }
              ],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55",
              "isLocker(address)": "2ec63d7c",
              "newLocker(address)": "19eb783a",
              "owner(address)": "666e1b39"
            }
          }
        },
        "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"
            }
          }
        },
        "ILoanFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "borrower",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "collateralLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "fundingLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[5]",
                  "name": "specs",
                  "type": "uint256[5]"
                },
                {
                  "indexed": false,
                  "internalType": "address[3]",
                  "name": "calcs",
                  "type": "address[3]"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "name": "LoanCreated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loanFactoryAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "LoanFactoryAdminSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "CL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "FL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "INTEREST_CALC_TYPE",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "LATEFEE_CALC_TYPE",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "PREMIUM_CALC_TYPE",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "flFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256[5]",
                  "name": "specs",
                  "type": "uint256[5]"
                },
                {
                  "internalType": "address[3]",
                  "name": "calcs",
                  "type": "address[3]"
                }
              ],
              "name": "createLoan",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "globals",
              "outputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                }
              ],
              "name": "isLoan",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "admin",
                  "type": "address"
                }
              ],
              "name": "loanFactoryAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "loans",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "loansCreated",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newGlobals",
                  "type": "address"
                }
              ],
              "name": "setGlobals",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanFactoryAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setLoanFactoryAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "CL_FACTORY()": "e70dd6cf",
              "FL_FACTORY()": "38505fb0",
              "INTEREST_CALC_TYPE()": "8c38922f",
              "LATEFEE_CALC_TYPE()": "3493f4ca",
              "PREMIUM_CALC_TYPE()": "7a8fe3c0",
              "createLoan(address,address,address,address,uint256[5],address[3])": "d5ab2074",
              "globals()": "c3124525",
              "isLoan(address)": "2819cbc2",
              "loanFactoryAdmins(address)": "a620e0ac",
              "loans(uint256)": "e1ec3c68",
              "loansCreated()": "ee9b75b5",
              "pause()": "8456cb59",
              "setGlobals(address)": "cc2e0a26",
              "setLoanFactoryAdmin(address,bool)": "2cd0aca0",
              "unpause()": "3f4ba83a"
            }
          }
        },
        "IMapleGlobals": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "BalancerPoolSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "CollateralAssetSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newGlobalAdmin",
                  "type": "address"
                }
              ],
              "name": "GlobalAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "bytes32",
                  "name": "which",
                  "type": "bytes32"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "addr",
                  "type": "address"
                }
              ],
              "name": "GlobalsAddressSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "bytes32",
                  "name": "which",
                  "type": "bytes32"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "GlobalsParamSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "governor",
                  "type": "address"
                }
              ],
              "name": "GovernorAccepted",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "decimals",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "LiquidityAssetSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "oracle",
                  "type": "address"
                }
              ],
              "name": "OracleSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pendingGovernor",
                  "type": "address"
                }
              ],
              "name": "PendingGovernorSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "PoolDelegateSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "pause",
                  "type": "bool"
                }
              ],
              "name": "ProtocolPaused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "exemptedContract",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "TransferRestrictionExemptionSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "acceptGovernor",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "defaultGracePeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "name": "defaultUniswapPath",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "fundingPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                }
              ],
              "name": "getLatestPrice",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getLpCooldownParams",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "globalAdmin",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "governor",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "investorFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                }
              ],
              "name": "isValidBalancerPool",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "calc",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "calcType",
                  "type": "uint8"
                }
              ],
              "name": "isValidCalc",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "collateralAsset",
                  "type": "address"
                }
              ],
              "name": "isValidCollateralAsset",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "isValidLiquidityAsset",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanFactory",
                  "type": "address"
                }
              ],
              "name": "isValidLoanFactory",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                }
              ],
              "name": "isValidPoolDelegate",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactory",
                  "type": "address"
                }
              ],
              "name": "isValidPoolFactory",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "superFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "subFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "factoryType",
                  "type": "uint8"
                }
              ],
              "name": "isValidSubFactory",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lpCooldownPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lpWithdrawWindow",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "mapleTreasury",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "maxSwapSlippage",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "minLoanEquity",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "mpl",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                }
              ],
              "name": "oracleFor",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pendingGovernor",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "protocolPaused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "calc",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setCalc",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setCollateralAsset",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_defaultGracePeriod",
                  "type": "uint256"
                }
              ],
              "name": "setDefaultGracePeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "mid",
                  "type": "address"
                }
              ],
              "name": "setDefaultUniswapPath",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fundingPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setFundingPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newGlobalAdmin",
                  "type": "address"
                }
              ],
              "name": "setGlobalAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setInvestorFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setLiquidityAsset",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newCooldownPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLpCooldownPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLpWithdrawWindow",
                  "type": "uint256"
                }
              ],
              "name": "setLpWithdrawWindow",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_mapleTreasury",
                  "type": "address"
                }
              ],
              "name": "setMapleTreasury",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newMaxSlippage",
                  "type": "uint256"
                }
              ],
              "name": "setMaxSwapSlippage",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_minLoanEquity",
                  "type": "uint256"
                }
              ],
              "name": "setMinLoanEquity",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_pendingGovernor",
                  "type": "address"
                }
              ],
              "name": "setPendingGovernor",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setPoolDelegateAllowlist",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "asset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "oracle",
                  "type": "address"
                }
              ],
              "name": "setPriceOracle",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "pause",
                  "type": "bool"
                }
              ],
              "name": "setProtocolPause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newCooldownPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setStakerCooldownPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newUnstakeWindow",
                  "type": "uint256"
                }
              ],
              "name": "setStakerUnstakeWindow",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "setSwapOutRequired",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_fee",
                  "type": "uint256"
                }
              ],
              "name": "setTreasuryFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidBalancerPool",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loanFactory",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidLoanFactory",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactory",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidPoolFactory",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "superFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "subFactory",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "valid",
                  "type": "bool"
                }
              ],
              "name": "setValidSubFactory",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakerCooldownPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakerUnstakeWindow",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "swapOutRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "treasuryFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "calc",
                  "type": "address"
                }
              ],
              "name": "validCalcs",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "superFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "subFactory",
                  "type": "address"
                }
              ],
              "name": "validSubFactories",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "acceptGovernor()": "e58bb639",
              "defaultGracePeriod()": "705d5f24",
              "defaultUniswapPath(address,address)": "4d866592",
              "fundingPeriod()": "74d7c62b",
              "getLatestPrice(address)": "16345f18",
              "getLpCooldownParams()": "9f51290b",
              "globalAdmin()": "ec9a9368",
              "governor()": "0c340a24",
              "investorFee()": "16a12d7a",
              "isValidBalancerPool(address)": "72a22d71",
              "isValidCalc(address,uint8)": "1b5833f7",
              "isValidCollateralAsset(address)": "8c14834b",
              "isValidLiquidityAsset(address)": "8695118a",
              "isValidLoanFactory(address)": "b53afda7",
              "isValidPoolDelegate(address)": "372e3546",
              "isValidPoolFactory(address)": "107c0240",
              "isValidSubFactory(address,address,uint8)": "13d459fb",
              "lpCooldownPeriod()": "dd02e0ec",
              "lpWithdrawWindow()": "df3d02bd",
              "mapleTreasury()": "a5a27605",
              "maxSwapSlippage()": "55323195",
              "minLoanEquity()": "4a2697c4",
              "mpl()": "a0530946",
              "oracleFor(address)": "aed019b9",
              "pendingGovernor()": "e3056a34",
              "protocolPaused()": "425fad58",
              "setCalc(address,bool)": "be44ed6b",
              "setCollateralAsset(address,bool)": "2fa6c88f",
              "setDefaultGracePeriod(uint256)": "44c14f71",
              "setDefaultUniswapPath(address,address,address)": "f3897663",
              "setFundingPeriod(uint256)": "2a5aa292",
              "setGlobalAdmin(address)": "c52bc31d",
              "setInvestorFee(uint256)": "5e045467",
              "setLiquidityAsset(address,bool)": "2daa0d89",
              "setLpCooldownPeriod(uint256)": "8608a6e1",
              "setLpWithdrawWindow(uint256)": "26718606",
              "setMapleTreasury(address)": "7303de25",
              "setMaxSwapSlippage(uint256)": "f33ef09a",
              "setMinLoanEquity(uint256)": "298b795d",
              "setPendingGovernor(address)": "f235757f",
              "setPoolDelegateAllowlist(address,bool)": "efdb16fc",
              "setPriceOracle(address,address)": "67a74ddc",
              "setProtocolPause(bool)": "4e989118",
              "setStakerCooldownPeriod(uint256)": "fd4a9121",
              "setStakerUnstakeWindow(uint256)": "d1cdf301",
              "setSwapOutRequired(uint256)": "dbc6c552",
              "setTreasuryFee(uint256)": "77e741c7",
              "setValidBalancerPool(address,bool)": "490dae64",
              "setValidLoanFactory(address,bool)": "c9c67240",
              "setValidPoolFactory(address,bool)": "6597b899",
              "setValidSubFactory(address,address,bool)": "f85ee6f8",
              "stakerCooldownPeriod()": "a965d6b5",
              "stakerUnstakeWindow()": "2018b870",
              "swapOutRequired()": "3106374c",
              "treasuryFee()": "cc32d176",
              "validCalcs(address)": "1beb84e7",
              "validSubFactories(address,address)": "1b1804aa"
            }
          }
        },
        "IPool": {
          "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": "liquidityProvider",
                  "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": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "interest",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principal",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakeLockerPortion",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "poolDelegatePortion",
                  "type": "uint256"
                }
              ],
              "name": "Claim",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "cooldown",
                  "type": "uint256"
                }
              ],
              "name": "Cooldown",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "oldAllowance",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newAllowance",
                  "type": "uint256"
                }
              ],
              "name": "CustodyAllowanceChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "CustodyTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "defaultSuffered",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsBurned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsReturned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityAssetRecoveredFromBurn",
                  "type": "uint256"
                }
              ],
              "name": "DefaultSuffered",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "depositDate",
                  "type": "uint256"
                }
              ],
              "name": "DepositDateUpdated",
              "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": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "LPStatusChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCapSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "LockupPeriodSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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": "poolAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "PoolAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "isOpen",
                  "type": "bool"
                }
              ],
              "name": "PoolOpenedToPublic",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "enum IPool.State",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "name": "PoolStateChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "StakingFeeSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newTotalAllowance",
                  "type": "uint256"
                }
              ],
              "name": "TotalCustodyAllowanceUpdated",
              "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": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                }
              ],
              "name": "BPTVal",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": "liquidityProvider",
                  "type": "address"
                }
              ],
              "name": "allowedLiquidityProviders",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "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": "cancelWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "claim",
              "outputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "claimInfo",
                  "type": "uint256[7]"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                }
              ],
              "name": "custodyAllowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "deactivate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "debtLockerFactory",
                  "type": "address"
                }
              ],
              "name": "debtLockers",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "delegateFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "deposit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "depositDate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "finalize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getInitialStakeRequirements",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_liquidityAssetAmountRequired",
                  "type": "uint256"
                }
              ],
              "name": "getPoolSharesRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "intendToWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "depositAmt",
                  "type": "uint256"
                }
              ],
              "name": "isDepositAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "isPoolFinalized",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityCap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lockupPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "openToPublic",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolAdmin",
                  "type": "address"
                }
              ],
              "name": "poolAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolDelegate",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolState",
              "outputs": [
                {
                  "internalType": "enum IPool.State",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalOut",
              "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": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "setAllowList",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityCap",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLockupPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "open",
                  "type": "bool"
                }
              ],
              "name": "setOpenToPublic",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setPoolAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "setStakingFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeAsset",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakingFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "superFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "totalCustodyAllowance",
              "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": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferByCustodian",
              "outputs": [],
              "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": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                }
              ],
              "name": "withdrawCooldown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "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": {
              "BPTVal(address,address,address,address)": "681cb10a",
              "DL_FACTORY()": "174a5be4",
              "accumulativeFundsOf(address)": "4e97415f",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "allowedLiquidityProviders(address)": "c59e3959",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "cancelWithdraw()": "84b76824",
              "claim(address,address)": "21c0b342",
              "custodyAllowance(address,address)": "c965b548",
              "deactivate()": "51b42b00",
              "debtLockers(address,address)": "d7bd3c91",
              "delegateFee()": "b69410de",
              "deposit(uint256)": "b6b55f25",
              "depositDate(address)": "24b92e8e",
              "finalize()": "4bb278f3",
              "fundLoan(address,address,uint256)": "1aa37cec",
              "getInitialStakeRequirements()": "13bf9e7e",
              "getPoolSharesRequired(address,address,address,address,uint256)": "c3746825",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "intendToWithdraw()": "73ef9a50",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "isDepositAllowed(uint256)": "80e7ce85",
              "isPoolFinalized()": "4f85221a",
              "liquidityAsset()": "209b2bca",
              "liquidityCap()": "76687d3d",
              "liquidityLocker()": "9759164a",
              "lockupPeriod()": "ee947a7c",
              "lossesBalance()": "fec984e3",
              "openToPublic()": "1831ccf2",
              "poolAdmins(address)": "613384f2",
              "poolDelegate()": "4046af2b",
              "poolLosses()": "a33142f7",
              "poolState()": "641ad8a9",
              "principalOut()": "ac641655",
              "reclaimERC20(address)": "8905fd4f",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "setAllowList(address,bool)": "7666f125",
              "setLiquidityCap(uint256)": "7b99adb1",
              "setLockupPeriod(uint256)": "c771c390",
              "setOpenToPublic(bool)": "a43baa3d",
              "setPoolAdmin(address,bool)": "9185192a",
              "setStakingFee(uint256)": "410dbf7e",
              "stakeAsset()": "80cd916d",
              "stakeLocker()": "033b1cf0",
              "stakingFee()": "eff98843",
              "superFactory()": "0d49b38c",
              "totalCustodyAllowance(address)": "af6d5571",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferByCustodian(address,address,uint256)": "2ac04ac8",
              "transferFrom(address,address,uint256)": "23b872dd",
              "triggerDefault(address,address)": "40504ba0",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdraw(uint256)": "2e1a7d4d",
              "withdrawCooldown(address)": "d82745c8",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IPoolFDT": {
          "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": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "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": "updateLossesReceived",
              "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",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "lossesBalance()": "fec984e3",
              "poolLosses()": "a33142f7",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IPoolFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "delegate",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityCap",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "name": "PoolCreated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "PoolFactoryAdminSet",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "LL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "SL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "slFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "llFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "createPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "poolAddress",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "globals",
              "outputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                }
              ],
              "name": "isPool",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                }
              ],
              "name": "poolFactoryAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                }
              ],
              "name": "pools",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolsCreated",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newGlobals",
                  "type": "address"
                }
              ],
              "name": "setGlobals",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setPoolFactoryAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "LL_FACTORY()": "c5ba73ed",
              "SL_FACTORY()": "9f71f14a",
              "createPool(address,address,address,address,uint256,uint256,uint256)": "312b8982",
              "globals()": "c3124525",
              "isPool(address)": "5b16ebb7",
              "pause()": "8456cb59",
              "poolFactoryAdmins(address)": "6050abb2",
              "pools(uint256)": "ac4afa38",
              "poolsCreated()": "945164e7",
              "setGlobals(address)": "cc2e0a26",
              "setPoolFactoryAdmin(address,bool)": "f3f616c0",
              "unpause()": "3f4ba83a"
            }
          }
        },
        "IStakeLocker": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "AllowListUpdated",
              "type": "event"
            },
            {
              "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": "staker",
                  "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": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "cooldown",
                  "type": "uint256"
                }
              ],
              "name": "Cooldown",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "oldAllowance",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newAllowance",
                  "type": "uint256"
                }
              ],
              "name": "CustodyAllowanceChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "CustodyTransfer",
              "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": "lockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "LockupPeriodUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Stake",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakeDate",
                  "type": "uint256"
                }
              ],
              "name": "StakeDateUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [],
              "name": "StakeLockerOpened",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newTotalAllowance",
                  "type": "uint256"
                }
              ],
              "name": "TotalCustodyAllowanceUpdated",
              "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"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "Unstake",
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": "account",
                  "type": "address"
                }
              ],
              "name": "allowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "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": "bptLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "cancelUnstake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                }
              ],
              "name": "custodyAllowance",
              "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": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "intendToUnstake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "_unstakeCooldown",
                  "type": "uint256"
                }
              ],
              "name": "isReceiveAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                }
              ],
              "name": "isUnstakeAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lockupPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "openStakeLockerToPublic",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "openToPublic",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "dst",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "pull",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "setAllowlist",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLockupPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "stake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "stakeDate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "totalCustodyAllowance",
              "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": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferByCustodian",
              "outputs": [],
              "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": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "unstake",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "unstakeCooldown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "bptsBurned",
                  "type": "uint256"
                }
              ],
              "name": "updateLosses",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "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",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "allowed(address)": "d63a8e11",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "bptLosses()": "aedc78c3",
              "cancelUnstake()": "4ab17969",
              "custodyAllowance(address,address)": "c965b548",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "intendToUnstake()": "8a10555c",
              "isReceiveAllowed(uint256)": "fab11078",
              "isUnstakeAllowed(address)": "86bf1da3",
              "liquidityAsset()": "209b2bca",
              "lockupPeriod()": "ee947a7c",
              "lossesBalance()": "fec984e3",
              "openStakeLockerToPublic()": "0e754e86",
              "openToPublic()": "1831ccf2",
              "pause()": "8456cb59",
              "pool()": "16f0115b",
              "pull(address,uint256)": "f2d5d56b",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "setAllowlist(address,bool)": "b12527f8",
              "setLockupPeriod(uint256)": "c771c390",
              "stake(uint256)": "a694fc3a",
              "stakeAsset()": "80cd916d",
              "stakeDate(address)": "5190bbaf",
              "totalCustodyAllowance(address)": "af6d5571",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferByCustodian(address,address,uint256)": "2ac04ac8",
              "transferFrom(address,address,uint256)": "23b872dd",
              "unpause()": "3f4ba83a",
              "unstake(uint256)": "2e17de78",
              "unstakeCooldown(address)": "ff887130",
              "updateFundsReceived()": "46c162de",
              "updateLosses(uint256)": "bcd01be7",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IStakeLockerFDT": {
          "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": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": "bptLosses",
              "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": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "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": "updateLossesReceived",
              "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",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "bptLosses()": "aedc78c3",
              "fundsToken()": "63f04b15",
              "fundsTokenBalance()": "a9691f3f",
              "lossesBalance()": "fec984e3",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "IStakeLockerFactory": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "name": "StakeLockerCreated",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "isLocker",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "newLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55",
              "isLocker(address)": "2ec63d7c",
              "newLocker(address,address)": "85de067e",
              "owner(address)": "666e1b39"
            }
          }
        },
        "ISubFactory": {
          "abi": [
            {
              "inputs": [],
              "name": "factoryType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "factoryType()": "64e1fd55"
            }
          }
        },
        "Pausable": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "paused()": "5c975abb"
            }
          }
        },
        "Pool": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_poolDelegate",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_slFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_llFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_stakingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_delegateFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_liquidityCap",
                  "type": "uint256"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "liquidityProvider",
                  "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": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "interest",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "principal",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "fee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakeLockerPortion",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "poolDelegatePortion",
                  "type": "uint256"
                }
              ],
              "name": "Claim",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "cooldown",
                  "type": "uint256"
                }
              ],
              "name": "Cooldown",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "oldAllowance",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newAllowance",
                  "type": "uint256"
                }
              ],
              "name": "CustodyAllowanceChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "CustodyTransfer",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "defaultSuffered",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsBurned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "bptsReturned",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityAssetRecoveredFromBurn",
                  "type": "uint256"
                }
              ],
              "name": "DefaultSuffered",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "depositDate",
                  "type": "uint256"
                }
              ],
              "name": "DepositDateUpdated",
              "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": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "LPStatusChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "LiquidityCapSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "LockupPeriodSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "int256",
                  "name": "",
                  "type": "int256"
                }
              ],
              "name": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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": "poolAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "PoolAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "isOpen",
                  "type": "bool"
                }
              ],
              "name": "PoolOpenedToPublic",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "enum IPool.State",
                  "name": "state",
                  "type": "uint8"
                }
              ],
              "name": "PoolStateChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "StakingFeeSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "newTotalAllowance",
                  "type": "uint256"
                }
              ],
              "name": "TotalCustodyAllowanceUpdated",
              "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": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                }
              ],
              "name": "BPTVal",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": "",
                  "type": "address"
                }
              ],
              "name": "allowedLiquidityProviders",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "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": "cancelWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "claim",
              "outputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "claimInfo",
                  "type": "uint256[7]"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "custodyAllowance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "deactivate",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "debtLockers",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "delegateFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "deposit",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "depositDate",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "finalize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "fundLoan",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getInitialStakeRequirements",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_stakeLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_liquidityAssetAmountRequired",
                  "type": "uint256"
                }
              ],
              "name": "getPoolSharesRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowance",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "intendToWithdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "depositAmt",
                  "type": "uint256"
                }
              ],
              "name": "isDepositAllowed",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "isPoolFinalized",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityAsset",
              "outputs": [
                {
                  "internalType": "contract IERC20",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityCap",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "liquidityLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lockupPeriod",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "openToPublic",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "poolAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolDelegate",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolState",
              "outputs": [
                {
                  "internalType": "enum IPool.State",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "principalOut",
              "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": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "status",
                  "type": "bool"
                }
              ],
              "name": "setAllowList",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLiquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "setLiquidityCap",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newLockupPeriod",
                  "type": "uint256"
                }
              ],
              "name": "setLockupPeriod",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bool",
                  "name": "open",
                  "type": "bool"
                }
              ],
              "name": "setOpenToPublic",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setPoolAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "newStakingFee",
                  "type": "uint256"
                }
              ],
              "name": "setStakingFee",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeAsset",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakeLocker",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "stakingFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "superFactory",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "totalCustodyAllowance",
              "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": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferByCustodian",
              "outputs": [],
              "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": [
                {
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "dlFactory",
                  "type": "address"
                }
              ],
              "name": "triggerDefault",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateFundsReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "updateLossesReceived",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                }
              ],
              "name": "withdraw",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "withdrawCooldown",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "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": {
                "contracts/core/pool/v1/PoolFactory.sol": {
                  "PoolLib": [
                    {
                      "length": 20,
                      "start": 545
                    },
                    {
                      "length": 20,
                      "start": 5329
                    },
                    {
                      "length": 20,
                      "start": 5901
                    },
                    {
                      "length": 20,
                      "start": 6241
                    },
                    {
                      "length": 20,
                      "start": 7612
                    },
                    {
                      "length": 20,
                      "start": 8040
                    },
                    {
                      "length": 20,
                      "start": 9722
                    },
                    {
                      "length": 20,
                      "start": 10180
                    },
                    {
                      "length": 20,
                      "start": 10936
                    },
                    {
                      "length": 20,
                      "start": 12075
                    },
                    {
                      "length": 20,
                      "start": 13802
                    }
                  ]
                }
              },
              "object": "6101806040523480156200001257600080fd5b50604051620050433803806200504383398181016040526101408110156200003957600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a01516101008b0180519751999b989a969995989497939692959194919392820192846401000000008211156200009257600080fd5b908301906020820185811115620000a857600080fd5b8251640100000000811182820188101715620000c357600080fd5b82525081516020918201929091019080838360005b83811015620000f2578181015183820152602001620000d8565b50505050905090810190601f168015620001205780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200014457600080fd5b9083019060208201858111156200015a57600080fd5b82516401000000008111828201881017156200017557600080fd5b82525081516020918201929091019080838360005b83811015620001a45781810151838201526020016200018a565b50505050905090810190601f168015620001d25780820380516001836020036101000a031916815260200191505b5060405250505081818181818181818160039080519060200190620001f99291906200056e565b5080516200020f9060049060208401906200056e565b50506005805460ff191660121790555073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__955063149851689450620002589350339250506001600160e01b03620004fe169050565b604080516001600160e01b031960e085901b1681526001600160a01b039283166004820152828e166024820152918c16604483015260648201899052608482018890525160a4808301926000929190829003018186803b158015620002bc57600080fd5b505af4158015620002d1573d6000803e3d6000fd5b50505050886001600160a01b03166080816001600160a01b031660601b81525050886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032c57600080fd5b505afa15801562000341573d6000803e3d6000fd5b505050506040513d60208110156200035857600080fd5b505160ff1661014052606088811b6001600160601b031990811660e0528b821b1660a052601086905561016085905233901b610120526012839055604080516342ef033f60e11b81526001600160a01b03808b1660048301528b811660248301529151918916916385de067e916044808201926020929091908290030181600087803b158015620003e857600080fd5b505af1158015620003fd573d6000803e3d6000fd5b505050506040513d60208110156200041457600080fd5b505160601b6001600160601b0319166101005260408051630cf5bc1d60e11b81526001600160a01b038b811660048301529151918816916319eb783a916024808201926020929091908290030181600087803b1580156200047457600080fd5b505af115801562000489573d6000803e3d6000fd5b505050506040513d6020811015620004a057600080fd5b505160601b6001600160601b03191660c05262ed4e00601355604080516000815290517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a916020908290030190a15050505050505050505062000613565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053a57600080fd5b505afa1580156200054f573d6000803e3d6000fd5b505050506040513d60208110156200056657600080fd5b505192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005b157805160ff1916838001178555620005e1565b82800160010185558215620005e1579182015b82811115620005e1578251825591602001919060010190620005c4565b50620005ef929150620005f3565b5090565b6200061091905b80821115620005ef5760008155600101620005fa565b90565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c61014051610160516148fd62000746600039806111395280611c695280612644525080613397525080610d5f5280610da85280610f5f52806119ae5280611ed152806123b15280612c755280613020525080610c875280610e6b528061127752806112f2528061139f52806114195280612e45525080610df3528061225f5280612e6d525080610f8752806112a1528061251052806127285280612c0c5280612f7552806132ac5280613805525080610e43528061124d5280611b4c5280612d4b5280613b28525080610e1b5280611027528061137552806113ea5280611efa528061238d52806127055280612be25280612dd95280612e1d5280612f5352806137d652506148fd6000f3fe608060405234801561001057600080fd5b50600436106103fb5760003560e01c806370a0823111610215578063a9059cbb11610125578063c771c390116100b8578063d82745c811610087578063d82745c814610bfa578063dd62ed3e14610c20578063ee947a7c14610c4e578063eff9884314610c56578063fec984e314610c5e576103fb565b8063c771c39014610b79578063c965b54814610b96578063cc0fef0214610bc4578063d7bd3c9114610bcc576103fb565b8063b69410de116100f4578063b69410de14610acf578063b6b55f2514610ad7578063c374682514610af4578063c59e395914610b53576103fb565b8063a9059cbb14610a4f578063ac64165514610a7b578063aed4966a14610a83578063af6d557114610aa9576103fb565b806384b76824116101a85780639759164a116101775780639759164a146109ec5780639f3c7325146109f4578063a33142f7146109fc578063a43baa3d14610a04578063a457c2d714610a23576103fb565b806384b76824146109885780638905fd4f146109905780639185192a146109b657806395d89b41146109e4576103fb565b806376687d3d116101e457806376687d3d1461093e5780637b99adb11461094657806380cd916d1461096357806380e7ce851461096b576103fb565b806370a08231146108da57806371073bac1461090057806373ef9a50146109085780637666f12514610910576103fb565b80632e1a7d4d1161031057806346c162de116102a357806351b42b001161027257806351b42b001461081c578063613384f214610824578063641ad8a91461084a5780636696779114610876578063681cb10a1461089c576103fb565b806346c162de146107de5780634bb278f3146107e65780634e97415f146107ee5780634f85221a14610814576103fb565b806340504ba0116102df57806340504ba01461074757806340bde09814610775578063410dbf7e1461079b578063443bb293146107b8576103fb565b80632e1a7d4d146106ee578063313ce5671461070b57806339509351146107135780634046af2b1461073f576103fb565b80631831ccf21161039357806323b872dd1161036257806323b872dd1461062857806324600fc31461065e57806324b92e8e1461066657806327f918561461068c5780632ac04ac8146106b8576103fb565b80631831ccf21461057a5780631aa37cec14610582578063209b2bca146105ba57806321c0b342146105c2576103fb565b80630d49b38c116103cf5780630d49b38c1461051957806313bf9e7e14610521578063174a5be41461055457806318160ddd14610572576103fb565b806241c52c14610400578063033b1cf01461043857806306fdde031461045c578063095ea7b3146104d9575b600080fd5b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610c66565b60408051918252519081900360200190f35b610440610c85565b604080516001600160a01b039092168252519081900360200190f35b610464610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610505600480360360408110156104ef57600080fd5b506001600160a01b038135169060200135610d3f565b604080519115158252519081900360200190f35b610440610d5d565b610529610d81565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b61055c610f04565b6040805160ff9092168252519081900360200190f35b610426610f09565b610505610f0f565b6105b86004803603606081101561059857600080fd5b506001600160a01b03813581169160208101359091169060400135610f18565b005b610440611025565b6105f0600480360360408110156105d857600080fd5b506001600160a01b0381358116916020013516611049565b604051808260e080838360005b838110156106155781810151838201526020016105fd565b5050505090500191505060405180910390f35b6105056004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611525565b6105b86115b3565b6104266004803603602081101561067c57600080fd5b50356001600160a01b0316611607565b6105b8600480360360408110156106a257600080fd5b506001600160a01b038135169060200135611619565b6105b8600480360360608110156106ce57600080fd5b506001600160a01b038135811691602081013590911690604001356117ba565b6105b86004803603602081101561070457600080fd5b5035611991565b61055c611aed565b6105056004803603604081101561072957600080fd5b506001600160a01b038135169060200135611af6565b610440611b4a565b6105b86004803603604081101561075d57600080fd5b506001600160a01b0381358116916020013516611b6e565b6104266004803603602081101561078b57600080fd5b50356001600160a01b0316611bef565b6105b8600480360360208110156107b157600080fd5b5035611c58565b610426600480360360208110156107ce57600080fd5b50356001600160a01b0316611d0d565b6105b8611d3f565b6105b8611d6d565b6104266004803603602081101561080457600080fd5b50356001600160a01b0316611e3b565b610505611e80565b6105b8611ea0565b6105056004803603602081101561083a57600080fd5b50356001600160a01b0316611ff9565b61085261200e565b6040518082600281111561086257fe5b60ff16815260200191505060405180910390f35b6104266004803603602081101561088c57600080fd5b50356001600160a01b031661201c565b610426600480360360808110156108b257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612042565b610426600480360360208110156108f057600080fd5b50356001600160a01b03166120ed565b610426612108565b6105b861210e565b6105b86004803603604081101561092657600080fd5b506001600160a01b03813516906020013515156121a4565b61042661220c565b6105b86004803603602081101561095c57600080fd5b5035612212565b61044061225d565b6105056004803603602081101561098157600080fd5b5035612281565b6105b86122d4565b6105b8600480360360208110156109a657600080fd5b50356001600160a01b0316612370565b6105b8600480360360408110156109cc57600080fd5b506001600160a01b0381351690602001351515612445565b6104646124ad565b61044061250e565b610426612532565b610426612538565b6105b860048036036020811015610a1a57600080fd5b5035151561253e565b61050560048036036040811015610a3957600080fd5b506001600160a01b03813516906020013561258d565b61050560048036036040811015610a6557600080fd5b506001600160a01b0381351690602001356125fb565b61042661260f565b61042660048036036020811015610a9957600080fd5b50356001600160a01b0316612615565b61042660048036036020811015610abf57600080fd5b50356001600160a01b0316612630565b610426612642565b6105b860048036036020811015610aed57600080fd5b5035612666565b610b3a600480360360a0811015610b0a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356127a0565b6040805192835260208301919091528051918290030190f35b61050560048036036020811015610b6957600080fd5b50356001600160a01b031661285d565b6105b860048036036020811015610b8f57600080fd5b5035612872565b61042660048036036040811015610bac57600080fd5b506001600160a01b03813581169160200135166128fa565b6105b8612917565b61044060048036036040811015610be257600080fd5b506001600160a01b0381358116916020013516612942565b61042660048036036020811015610c1057600080fd5b50356001600160a01b0316612968565b61042660048036036040811015610c3657600080fd5b506001600160a01b038135811691602001351661297a565b6104266129a5565b6104266129ab565b6104266129b1565b6001600160a01b0381166000908152600860205260409020545b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6129b7565b84846129bb565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63767f5038610dcc7f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6040805160e084901b6001600160e01b03191681526001600160a01b0392831660048201527f0000000000000000000000000000000000000000000000000000000000000000831660248201527f0000000000000000000000000000000000000000000000000000000000000000831660448201527f0000000000000000000000000000000000000000000000000000000000000000831660648201527f000000000000000000000000000000000000000000000000000000000000000090921660848301525160a48083019260a0929190829003018186803b158015610eb257600080fd5b505af4158015610ec6573d6000803e3d6000fd5b505050506040513d60a0811015610edc57600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b600181565b60025490565b60145460ff1681565b610f20612b14565b610f2a6001612b24565b601154610f3d908263ffffffff612b8616565b6011556040805163fbecb17160e01b8152601660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528416608482015260a48101839052905173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163fbecb1719160c4808301926000929190829003018186803b15801561100057600080fd5b505af4158015611014573d6000803e3d6000fd5b50505050611020612be0565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110516146af565b611059612c70565b611061612d40565b6001600160a01b0380841660009081526016602090815260408083208685168452909152808220548151634e71d92d60e01b81529151931692634e71d92d9260048084019360e093929083900390910190829087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156110fc57600080fd5b50601054604051633faa6c5d60e01b815291925060009182918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91633faa6c5d9188917f00000000000000000000000000000000000000000000000000000000000000009190600401808460e08083838c5b8381101561117e578181015183820152602001611166565b50505050905001838152602001828152602001935050505060806040518083038186803b1580156111ae57600080fd5b505af41580156111c2573d6000803e3d6000fd5b505050506040513d60808110156111d857600080fd5b50805160208201516040830151606090930151601154929750909550919350909150821161120e57601180548390039055611232565b601154611224908290840363ffffffff612b8616565b601180546000909155925090505b600c54611245908263ffffffff612b8616565b600c556112727f000000000000000000000000000000000000000000000000000000000000000085612dcc565b61129c7f000000000000000000000000000000000000000000000000000000000000000084612dcc565b6112d57f00000000000000000000000000000000000000000000000000000000000000006112d0848463ffffffff612b8616565b612dcc565b60c0850151156112f0576112f0878660066020020151612e06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c162de6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b5050505061136b611d3f565b611373612be0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d60208110156114a857600080fd5b505160408051918252519081900360200190a36060808601516040805184815260208101869052808201929092529181018590526080810186905290516001600160a01b038916917f21280d282ce6aa29c649fd1825373d7c77892fac3f1958fd98d5ca52dd82a197919081900360a00190a25050505092915050565b6000611532848484613010565b6115a88461153e6129b7565b6115a3856040518060600160405280602881526020016147c3602891396001600160a01b038a1660009081526001602052604081209061157c6129b7565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61318e16565b6129bb565b5060015b9392505050565b6115bb612c70565b60006115c5613225565b9050806115d25750611605565b6115dc33826132aa565b6115e4612be0565b600c546115f7908263ffffffff61332a16565b600c5561160261336c565b50505b565b60156020526000908152604090205481565b336000908152601a602090815260408083206001600160a01b03861684529091528120549061164e828463ffffffff612b8616565b336000908152601b602052604081205491925090611672908563ffffffff612b8616565b905073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63297e7bf786868461169a336120ed565b6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200182815260200194505050505060006040518083038186803b1580156116f557600080fd5b505af4158015611709573d6000803e3d6000fd5b5050336000818152601a602090815260408083206001600160a01b038c16808552908352818420899055848452601b835292819020879055805189815291820188905280519295509293507f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e892908290030190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b0383166000908152601a60209081526040808320338452909152812054906117ef828463ffffffff61332a16565b60408051631b4c903160e01b81526001600160a01b0380891660048301528716602482015260448101869052905191925073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91631b4c903191606480820192600092909190829003018186803b15801561185c57600080fd5b505af4158015611870573d6000803e3d6000fd5b505050506001600160a01b0385166000818152601a602090815260408083203384528252808320859055928252601b9052908120546118af908561332a565b6001600160a01b038088166000818152601b60209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b611999612c70565b60006119a482613390565b90506000806119d27f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6040811015611a3357600080fd5b5080516020909101519092509050611a4b33846133dd565b3360009081526019602052604090205482014203811015611aac576040805162461bcd60e51b8152602060048201526016602482015275140e95d2551211149055d7d393d517d0531313d5d15160521b604482015290519081900360640190fd5b611ab633846134bc565b611abe6115b3565b611adf33611ada611acd613563565b879063ffffffff61332a16565b6132aa565b611ae7612be0565b50505050565b60055460ff1690565b6000610d53611b036129b7565b846115a38560016000611b146129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b8616565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b76612b14565b6001600160a01b038083166000908152601660209081526040808320858516845290915280822054815163175f832960e01b8152915193169263175f83299260048084019391929182900301818387803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90611c4a90611c4590611c39611c34611c25886120ed565b6009549063ffffffff61359216565b6135eb565b9063ffffffff61362c16565b613691565b81611c5157fe5b0492915050565b611c60612b14565b612710611c93827f000000000000000000000000000000000000000000000000000000000000000063ffffffff612b8616565b1115611cd2576040805162461bcd60e51b8152602060048201526009602482015268503a4241445f46454560b81b604482015290519081900360640190fd5b60108190556040805182815290517f9408bb8c08d29b335e36090045074610352365476d9df02e203c25db4fcd67c09181900360200190a150565b6001600160a01b038116600090815260086020526040812054610d5790611d3384611e3b565b9063ffffffff61332a16565b6000611d4961336c565b905060008113611d595750611605565b611d6a611d6582613691565b6136d2565b50565b611d75612b14565b611d7f6000612b24565b6000611d89610d81565b50509250505080611dd1576040805162461bcd60e51b815260206004820152600d60248201526c503a494e5355465f5354414b4560981b604482015290519081900360640190fd5b601480546001919061ff0019166101008302179055506014546040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a91610100900460ff169080826002811115611e2557fe5b60ff16815260200191505060405180910390a150565b6001600160a01b038116600090815260076020526040812054600160801b90611c4a90611c4590611c39611c34611e71886120ed565b6006549063ffffffff61359216565b60006001601454610100900460ff166002811115611e9a57fe5b14905090565b611ea8612b14565b611eb26001612b24565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63abbedb40611ef57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6011547f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b03168152602001935050505060006040518083038186803b158015611f7f57600080fd5b505af4158015611f93573d6000803e3d6000fd5b50506014805461ff00191661020017908190556040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a935061010090910460ff16915080826002811115611fe457fe5b60ff16815260200191505060405180910390a1565b60176020526000908152604090205460ff1681565b601454610100900460ff1681565b6001600160a01b0381166000908152600b6020526040812054610d5790611d3384611bef565b6040805163340e588560e11b81526001600160a01b0380871660048301528086166024830152808516604483015283166064820152905160009173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163681cb10a91608480820192602092909190829003018186803b1580156120b857600080fd5b505af41580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505195945050505050565b6001600160a01b031660009081526020819052604090205490565b600c5481565b6000612119336120ed565b1415612159576040805162461bcd60e51b815260206004820152600a602482015269140e96915493d7d0905360b21b604482015290519081900360640190fd5b336000818152601960209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6121ac612b14565b6001600160a01b038216600081815260186020908152604091829020805460ff1916851515908117909155825190815291517fdf56132520665b33cd5731c5cfbacd8bee82524e67df563bb25b2be304f91d449281900390910190a25050565b60125481565b61221a612c70565b612222612d40565b60128190556040805182815290517f3ff20538222f568f27ff436c0c49dfd3e48d5b8f86533a3f759dc1c7089775ab9181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145460009060ff16806122a457503360009081526018602052604090205460ff165b8015610d5757506012546122cc836122c06011546122c06137d2565b9063ffffffff612b8616565b111592915050565b33600090815260196020526040902054612329576040805162461bcd60e51b8152602060048201526011602482015270503a4e4f545f5749544844524157494e4760781b604482015290519081900360640190fd5b3360008181526019602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63a89d5ddb827f00000000000000000000000000000000000000000000000000000000000000006123d57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015290516064808301926000929190829003018186803b15801561242a57600080fd5b505af415801561243e573d6000803e3d6000fd5b5050505050565b61244d612b14565b6001600160a01b038216600081815260176020908152604091829020805460ff1916851515908117909155825190815291517f353578bbc0ab907b7018b0f7b50b5f822d31dc9fcf4c16fffa780e109ca7c9309281900390910190a25050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b600d5481565b612546612b14565b6014805482151560ff19909116811790915560408051918252517feeba6fd794e30165023f7e3d017e92901622076a95d36e45906955e025ff4fe79181900360200190a150565b6000610d5361259a6129b7565b846115a3856040518060600160405280602581526020016148a360259139600160006125c46129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61318e16565b6000610d536126086129b7565b8484613010565b60115481565b6001600160a01b03166000908152600b602052604090205490565b601b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61266e612c70565b6126786001612b24565b61268181612281565b6126c6576040805162461bcd60e51b8152602060048201526011602482015270140e91115417d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b3360009081526019602052604081208190556126e182613390565b90506126f860156126f1336120ed565b833361389b565b6127536001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61395416565b61275d33826139ae565b612765612be0565b6040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a25050565b6040805163c374682560e01b81526001600160a01b0380881660048301528087166024830152808616604483015284166064820152608481018390528151600092839273__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9263c37468259260a480840193919291829003018186803b15801561281c57600080fd5b505af4158015612830573d6000803e3d6000fd5b505050506040513d604081101561284657600080fd5b508051602090910151909890975095505050505050565b60186020526000908152604090205460ff1681565b61287a612b14565b6013548111156128bf576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f56414c554560a81b604482015290519081900360640190fd5b60138190556040805182815290517f3094b4ce0463766c3cd81ed2ae2451610dcac39a1061fa023ca9d3d4df959f759181900360200190a150565b601a60209081526000928352604080842090915290825290205481565b60006129216139fa565b9050600081136129315750611605565b611d6a61293d82613691565b613a18565b60166020908152600092835260408084209091529082529020546001600160a01b031681565b60196020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60135481565b60105481565b600f5481565b3390565b6001600160a01b038316612a005760405162461bcd60e51b81526004018080602001828103825260248152602001806148316024913960400191505060405180910390fd5b6001600160a01b038216612a455760405162461bcd60e51b81526004018080602001828103825260228152602001806147136022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d6020811015612b0c57600080fd5b505192915050565b612b1c613b1d565b611605612c70565b806002811115612b3057fe5b601454610100900460ff166002811115612b4657fe5b14611d6a576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f535441544560a81b604482015290519081900360640190fd5b6000828201838110156115ac576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a2612c5d6137d2565b60408051918252519081900360200190a3565b612c997f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b158015612cd157600080fd5b505afa158015612ce5573d6000803e3d6000fd5b505050506040513d6020811015612cfb57600080fd5b505115611605576040805162461bcd60e51b815260206004820152600e60248201526d140e941493d513d7d4105554d15160921b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612d8657503360009081526017602052604090205460ff165b611605576040805162461bcd60e51b8152602060048201526012602482015271281d2727aa2fa222a62fa7a92fa0a226a4a760711b604482015290519081900360640190fd5b6116026001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff613b8616565b6040805162715b0960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526064810183905290516000918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91630715b09091608480820192606092909190829003018186803b158015612ede57600080fd5b505af4158015612ef2573d6000803e3d6000fd5b505050506040513d6060811015612f0857600080fd5b5080516020820151604090920151909450909250905080841115612f4657600d54612f3b9082860363ffffffff612b8616565b600d55612f46612917565b612fa06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008363ffffffff613b8616565b601154612fb3908563ffffffff61332a16565b60115560408051858152602081018590528082018490526060810183905290516001600160a01b038716917fd393d18014c1898545668c52621bced9493753be5b8138f2539542ca606732eb919081900360800190a25050505050565b613018612c70565b6000806130447f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b15801561307b57600080fd5b505afa15801561308f573d6000803e3d6000fd5b505050506040513d60408110156130a557600080fd5b50805160209091015190925090506130bd85846133dd565b6001600160a01b038416600090815260196020526040902054820181014211613120576040805162461bcd60e51b815260206004820152601060248201526f140e9513d7d393d517d0531313d5d15160821b604482015290519081900360640190fd5b600061312b8661201c565b1461316e576040805162461bcd60e51b815260206004820152600e60248201526d503a5245434f475f4c4f5353455360901b604482015290519081900360640190fd5b613183601561317c866120ed565b858761389b565b61243e858585613bd8565b6000818484111561321d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131e25781810151838201526020016131ca565b50505050905090810190601f16801561320f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061323033611d0d565b3360009081526008602052604081205491925090613254908363ffffffff612b8616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611bd357600080fd5b60006115ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061318e565b600e8054600c549182905560009161338a908263ffffffff613d0416565b91505090565b6000610d577f0000000000000000000000000000000000000000000000000000000000000000600a0a6133d184670de0b6b3a764000063ffffffff61359216565b9063ffffffff613d6916565b6013546001600160a01b038316600090815260156020526040902054429161340b919063ffffffff612b8616565b111561344f576040805162461bcd60e51b815260206004820152600e60248201526d140e9195539114d7d313d0d2d15160921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205461347582611d33856120ed565b1015611602576040805162461bcd60e51b8152602060048201526011602482015270140e925394d55197d514905394d7d09053607a1b604482015290519081900360640190fd5b6134c68282613dab565b60006135086134e3611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b600061356d613e52565b600d54909150613583908263ffffffff61332a16565b600d5561358e6139fa565b5090565b6000826135a157506000610d57565b828202828482816135ae57fe5b04146115ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806147a26021913960400191505060405180910390fd5b806000811215610c80576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b60008282018183128015906136415750838112155b80613656575060008312801561365657508381125b6115ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061475b6021913960400191505060405180910390fd5b60008082121561358e576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b60006136dc610f09565b11613720576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b8061372a57611d6a565b613761613735610f09565b61374983600160801b63ffffffff61359216565b8161375057fe5b60065491900463ffffffff612b8616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561386a57600080fd5b505afa15801561387e573d6000803e3d6000fd5b505050506040513d602081101561389457600080fd5b5051905090565b6001600160a01b038116600090815260208590526040812054908484016138c257816138f8565b6138f86138eb8686016133d1876138df428863ffffffff61332a16565b9063ffffffff61359216565b839063ffffffff612b8616565b6001600160a01b038416600081815260208981526040918290208490558151848152915193945091927ff9b842c70d79466435b46540bb988aa5c998b3243bf91c36380ddb5887c0f0e4929181900390910190a2505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ae7908590613ed7565b6139b88282613f88565b60006135086139d5611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff613d0416565b600f8054600d549182905560009161338a908263ffffffff613d0416565b6000613a22610f09565b11613a66576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80613a7057611d6a565b6000613aa9613a7d610f09565b613a9184600160801b63ffffffff61359216565b81613a9857fe5b60095491900463ffffffff612b8616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611605576040805162461bcd60e51b8152602060048201526009602482015268140e9393d517d1115360ba1b604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611020908490613ed7565b613be3838383613fd4565b6000613bfd611c348360095461359290919063ffffffff16565b6001600160a01b0385166000908152600a602052604081205491925090613c2a908363ffffffff61362c16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613c64908463ffffffff613d0416565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6000818303818312801590613d195750838113155b80613d2e5750600083128015613d2e57508381135b6115ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806148556024913960400191505060405180910390fd5b60006115ac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b613db58282614165565b6000613df7613dd2611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b6000613e5d3361201c565b336000908152600b602052604081205491925090613e81908363ffffffff612b8616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6060613f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661426d9092919063ffffffff16565b80519091501561102057808060200190516020811015613f4b57600080fd5b50516110205760405162461bcd60e51b815260040180806020018281038252602a815260200180614879602a913960400191505060405180910390fd5b613f928282614284565b6000613df7613faf611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff613d0416565b613fdf838383614380565b6000613ff9611c348360065461359290919063ffffffff16565b6001600160a01b03851660009081526007602052604081205491925090614026908363ffffffff61362c16565b6001600160a01b0380871660009081526007602052604080822084905591871681529081205491925090614060908463ffffffff613d0416565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b6000818361414f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131e25781810151838201526020016131ca565b50600083858161415b57fe5b0495945050505050565b6001600160a01b0382166141aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806147eb6021913960400191505060405180910390fd5b6141b682600083611020565b6141f9816040518060600160405280602281526020016146f1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b038316600090815260208190526040902055600254614225908263ffffffff61332a16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b606061427c84846000856144e7565b949350505050565b6001600160a01b0382166142df576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6142eb60008383611020565b6002546142fe908263ffffffff612b8616565b6002556001600160a01b03821660009081526020819052604090205461432a908263ffffffff612b8616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166143c55760405162461bcd60e51b815260040180806020018281038252602581526020018061480c6025913960400191505060405180910390fd5b6001600160a01b03821661440a5760405162461bcd60e51b81526004018080602001828103825260238152602001806146ce6023913960400191505060405180910390fd5b614415838383611020565b61445881604051806060016040528060268152602001614735602691396001600160a01b038616600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461448d908263ffffffff612b8616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6060824710156145285760405162461bcd60e51b815260040180806020018281038252602681526020018061477c6026913960400191505060405180910390fd5b61453185614643565b614582576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614623576040519150601f19603f3d011682016040523d82523d6000602084013e614628565b606091505b5091509150614638828286614649565b979650505050505050565b3b151590565b606083156146585750816115ac565b8251156146685782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156131e25781810151838201526020016131ca565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec572c132b8c22ad83f829932565be6106a16d99ce4d467ff59c7503f0a88ad564736f6c634300060b0033",
              "opcodes": "PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5043 CODESIZE SUB DUP1 PUSH3 0x5043 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH2 0x140 DUP2 LT ISZERO PUSH3 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xC0 DUP10 ADD MLOAD PUSH1 0xE0 DUP11 ADD MLOAD PUSH2 0x100 DUP12 ADD DUP1 MLOAD SWAP8 MLOAD SWAP10 SWAP12 SWAP9 SWAP11 SWAP7 SWAP10 SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP2 SWAP4 SWAP3 DUP3 ADD SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0xA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0xC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x120 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x18A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1D2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x1F9 SWAP3 SWAP2 SWAP1 PUSH3 0x56E JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x20F SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x56E JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH20 0x0 SWAP6 POP PUSH4 0x14985168 SWAP5 POP PUSH3 0x258 SWAP4 POP CALLER SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x4FE AND SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP15 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP13 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP9 SWAP1 MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH3 0x2D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x341 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH2 0x140 MSTORE PUSH1 0x60 DUP9 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE DUP12 DUP3 SHL AND PUSH1 0xA0 MSTORE PUSH1 0x10 DUP7 SWAP1 SSTORE PUSH2 0x160 DUP6 SWAP1 MSTORE CALLER SWAP1 SHL PUSH2 0x120 MSTORE PUSH1 0x12 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x42EF033F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x4 DUP4 ADD MSTORE DUP12 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x85DE067E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x3FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xCF5BC1D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP9 AND SWAP2 PUSH4 0x19EB783A SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x474 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0xC0 MSTORE PUSH3 0xED4E00 PUSH1 0x13 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP PUSH3 0x613 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x54F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x5B1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x5E1 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x5E1 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x5E1 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x5C4 JUMP JUMPDEST POP PUSH3 0x5EF SWAP3 SWAP2 POP PUSH3 0x5F3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x610 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x5EF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x5FA JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x48FD PUSH3 0x746 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1139 MSTORE DUP1 PUSH2 0x1C69 MSTORE DUP1 PUSH2 0x2644 MSTORE POP DUP1 PUSH2 0x3397 MSTORE POP DUP1 PUSH2 0xD5F MSTORE DUP1 PUSH2 0xDA8 MSTORE DUP1 PUSH2 0xF5F MSTORE DUP1 PUSH2 0x19AE MSTORE DUP1 PUSH2 0x1ED1 MSTORE DUP1 PUSH2 0x23B1 MSTORE DUP1 PUSH2 0x2C75 MSTORE DUP1 PUSH2 0x3020 MSTORE POP DUP1 PUSH2 0xC87 MSTORE DUP1 PUSH2 0xE6B MSTORE DUP1 PUSH2 0x1277 MSTORE DUP1 PUSH2 0x12F2 MSTORE DUP1 PUSH2 0x139F MSTORE DUP1 PUSH2 0x1419 MSTORE DUP1 PUSH2 0x2E45 MSTORE POP DUP1 PUSH2 0xDF3 MSTORE DUP1 PUSH2 0x225F MSTORE DUP1 PUSH2 0x2E6D MSTORE POP DUP1 PUSH2 0xF87 MSTORE DUP1 PUSH2 0x12A1 MSTORE DUP1 PUSH2 0x2510 MSTORE DUP1 PUSH2 0x2728 MSTORE DUP1 PUSH2 0x2C0C MSTORE DUP1 PUSH2 0x2F75 MSTORE DUP1 PUSH2 0x32AC MSTORE DUP1 PUSH2 0x3805 MSTORE POP DUP1 PUSH2 0xE43 MSTORE DUP1 PUSH2 0x124D MSTORE DUP1 PUSH2 0x1B4C MSTORE DUP1 PUSH2 0x2D4B MSTORE DUP1 PUSH2 0x3B28 MSTORE POP DUP1 PUSH2 0xE1B MSTORE DUP1 PUSH2 0x1027 MSTORE DUP1 PUSH2 0x1375 MSTORE DUP1 PUSH2 0x13EA MSTORE DUP1 PUSH2 0x1EFA MSTORE DUP1 PUSH2 0x238D MSTORE DUP1 PUSH2 0x2705 MSTORE DUP1 PUSH2 0x2BE2 MSTORE DUP1 PUSH2 0x2DD9 MSTORE DUP1 PUSH2 0x2E1D MSTORE DUP1 PUSH2 0x2F53 MSTORE DUP1 PUSH2 0x37D6 MSTORE POP PUSH2 0x48FD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xC771C390 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD82745C8 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD82745C8 EQ PUSH2 0xBFA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC20 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0xC4E JUMPI DUP1 PUSH4 0xEFF98843 EQ PUSH2 0xC56 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0xC5E JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xC771C390 EQ PUSH2 0xB79 JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0xBC4 JUMPI DUP1 PUSH4 0xD7BD3C91 EQ PUSH2 0xBCC JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xB69410DE GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB69410DE EQ PUSH2 0xACF JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0xAF4 JUMPI DUP1 PUSH4 0xC59E3959 EQ PUSH2 0xB53 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0xAC641655 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0xA83 JUMPI DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0xAA9 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x9759164A GT PUSH2 0x177 JUMPI DUP1 PUSH4 0x9759164A EQ PUSH2 0x9EC JUMPI DUP1 PUSH4 0x9F3C7325 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xA33142F7 EQ PUSH2 0x9FC JUMPI DUP1 PUSH4 0xA43BAA3D EQ PUSH2 0xA04 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xA23 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 EQ PUSH2 0x988 JUMPI DUP1 PUSH4 0x8905FD4F EQ PUSH2 0x990 JUMPI DUP1 PUSH4 0x9185192A EQ PUSH2 0x9B6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x9E4 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x76687D3D GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x76687D3D EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x7B99ADB1 EQ PUSH2 0x946 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0x80E7CE85 EQ PUSH2 0x96B JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8DA JUMPI DUP1 PUSH4 0x71073BAC EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0x73EF9A50 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0x7666F125 EQ PUSH2 0x910 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x51B42B00 GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x51B42B00 EQ PUSH2 0x81C JUMPI DUP1 PUSH4 0x613384F2 EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0x641AD8A9 EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x876 JUMPI DUP1 PUSH4 0x681CB10A EQ PUSH2 0x89C JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x7DE JUMPI DUP1 PUSH4 0x4BB278F3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x7EE JUMPI DUP1 PUSH4 0x4F85221A EQ PUSH2 0x814 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x40504BA0 GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x40504BA0 EQ PUSH2 0x747 JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x410DBF7E EQ PUSH2 0x79B JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x7B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x4046AF2B EQ PUSH2 0x73F JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x24B92E8E EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x68C JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x6B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0x1AA37CEC EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0x21C0B342 EQ PUSH2 0x5C2 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xD49B38C GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0xD49B38C EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x13BF9E7E EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x572 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x33B1CF0 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x4D9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC66 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x464 PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x486 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4CB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x529 PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x55C PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x505 PUSH2 0xF0F JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF18 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x440 PUSH2 0x1025 JUMP JUMPDEST PUSH2 0x5F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xE0 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1525 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1607 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1619 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x17BA JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x1AED JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x1B4A JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D6D JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E3B JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1E80 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1EA0 JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x83A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1FF9 JUMP JUMPDEST PUSH2 0x852 PUSH2 0x200E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x862 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x201C JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x2042 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2108 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x210E JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x220C JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2212 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x981 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x22D4 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2370 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2445 JUMP JUMPDEST PUSH2 0x464 PUSH2 0x24AD JUMP JUMPDEST PUSH2 0x440 PUSH2 0x250E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x253E JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x258D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x260F JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2615 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2642 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2666 JUMP JUMPDEST PUSH2 0xB3A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x285D JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2872 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x28FA JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x2942 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2968 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x297A JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29AB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD18 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0xD4C PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0x0 PUSH4 0x767F5038 PUSH2 0xDCC PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP5 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x0 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xEC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF20 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0xF2A PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xF3D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFBECB171 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x16 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0x0 SWAP2 PUSH4 0xFBECB171 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1014 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1020 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1051 PUSH2 0x46AF JUMP JUMPDEST PUSH2 0x1059 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x1061 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x4E71D92D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x4E71D92D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 PUSH1 0xE0 SWAP4 SWAP3 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3FAA6C5D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x3FAA6C5D SWAP2 DUP9 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0xE0 DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x117E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1166 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD PUSH1 0x11 SLOAD SWAP3 SWAP8 POP SWAP1 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP3 GT PUSH2 0x120E JUMPI PUSH1 0x11 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1232 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x1224 SWAP1 DUP3 SWAP1 DUP5 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x0 SWAP1 SWAP2 SSTORE SWAP3 POP SWAP1 POP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1245 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1272 PUSH32 0x0 DUP6 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x129C PUSH32 0x0 DUP5 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x12D5 PUSH32 0x0 PUSH2 0x12D0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH2 0x2DCC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD ISZERO PUSH2 0x12F0 JUMPI PUSH2 0x12F0 DUP8 DUP7 PUSH1 0x6 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x2E06 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x46C162DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x136B PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x1373 PUSH2 0x2BE0 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 PUSH1 0x60 DUP1 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH32 0x21280D282CE6AA29C649FD1825373D7C77892FAC3F1958FD98D5CA52DD82A197 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 LOG2 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1532 DUP5 DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH2 0x15A8 DUP5 PUSH2 0x153E PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x47C3 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x157C PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x15BB PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C5 PUSH2 0x3225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x15D2 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x15DC CALLER DUP3 PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x15E4 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x15F7 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1602 PUSH2 0x336C JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x164E DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1672 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST SWAP1 POP PUSH20 0x0 PUSH4 0x297E7BF7 DUP7 DUP7 DUP5 PUSH2 0x169A CALLER PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1709 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP10 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x1B DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP8 SWAP1 SSTORE DUP1 MLOAD DUP10 DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP6 POP SWAP3 SWAP4 POP PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x17EF DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B4C9031 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x1B4C9031 SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x1B SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x18AF SWAP1 DUP6 PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP10 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 DUP10 AND SWAP4 SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xFAA022EA2CD7F14157070896FABADAFE96CC4D4714EEF7AE6A992A5084493ED5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG4 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1999 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19A4 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x19D2 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1A4B CALLER DUP5 PUSH2 0x33DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD TIMESTAMP SUB DUP2 LT ISZERO PUSH2 0x1AAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x140E95D2551211149055D7D393D517D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1AB6 CALLER DUP5 PUSH2 0x34BC JUMP JUMPDEST PUSH2 0x1ABE PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x1ADF CALLER PUSH2 0x1ADA PUSH2 0x1ACD PUSH2 0x3563 JUMP JUMPDEST DUP8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x1AE7 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x1B03 PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1B14 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B76 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x175F8329 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x175F8329 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1C25 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH2 0x35EB JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH2 0x3691 JUMP JUMPDEST DUP2 PUSH2 0x1C51 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C60 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x1C93 DUP3 PUSH32 0x0 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1CD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x503A4241445F464545 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x9408BB8C08D29B335E36090045074610352365476D9DF02E203C25DB4FCD67C0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1E3B JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D49 PUSH2 0x336C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1D59 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x1D65 DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x36D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D75 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1D7F PUSH1 0x0 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D89 PUSH2 0xD81 JUMP JUMPDEST POP POP SWAP3 POP POP POP DUP1 PUSH2 0x1DD1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x503A494E5355465F5354414B45 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x14 SLOAD PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E25 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1E71 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E9A JUMPI INVALID JUMPDEST EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA8 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1EB2 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xABBEDB40 PUSH2 0x1EF5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH32 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x14 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x200 OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP4 POP PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP2 POP DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FE4 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1BEF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x340E5885 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x681CB10A SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2119 CALLER PUSH2 0x20ED JUMP JUMPDEST EQ ISZERO PUSH2 0x2159 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x140E96915493D7D09053 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 DUP2 SWAP1 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH2 0x21AC PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xDF56132520665B33CD5731C5CFBACD8BEE82524E67DF563BB25B2BE304F91D44 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x221A PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2222 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x12 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3FF20538222F568F27FF436C0C49DFD3E48D5B8F86533A3F759DC1C7089775AB SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x22A4 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 ISZERO PUSH2 0xD57 JUMPI POP PUSH1 0x12 SLOAD PUSH2 0x22CC DUP4 PUSH2 0x22C0 PUSH1 0x11 SLOAD PUSH2 0x22C0 PUSH2 0x37D2 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x503A4E4F545F5749544844524157494E47 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE DUP1 MLOAD SWAP3 DUP4 MSTORE MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xA89D5DDB DUP3 PUSH32 0x0 PUSH2 0x23D5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x242A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x243E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x244D PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x353578BBC0AB907B7018B0F7B50B5F822D31DC9FCF4C16FFFA780E109CA7C930 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2546 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x14 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xEEBA6FD794E30165023F7E3D017E92901622076A95D36E45906955E025FF4FE7 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x259A PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x48A3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x25C4 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x2608 PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x266E PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2678 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH2 0x2681 DUP2 PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x26C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E91115417D393D517D0531313D5D151 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x26E1 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH2 0x26F8 PUSH1 0x15 PUSH2 0x26F1 CALLER PUSH2 0x20ED JUMP JUMPDEST DUP4 CALLER PUSH2 0x389B JUMP JUMPDEST PUSH2 0x2753 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER PUSH32 0x0 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x3954 AND JUMP JUMPDEST PUSH2 0x275D CALLER DUP3 PUSH2 0x39AE JUMP JUMPDEST PUSH2 0x2765 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3746825 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH20 0x0 SWAP3 PUSH4 0xC3746825 SWAP3 PUSH1 0xA4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x287A PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 GT ISZERO PUSH2 0x28BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F56414C5545 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3094B4CE0463766C3CD81ED2AE2451610DCAC39A1061FA023CA9D3D4DF959F75 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2921 PUSH2 0x39FA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x2931 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x293D DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x3A18 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2A00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4831 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4713 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B1C PUSH2 0x3B1D JUMP JUMPDEST PUSH2 0x1605 PUSH2 0x2C70 JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B30 JUMPI INVALID JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B46 JUMPI INVALID JUMPDEST EQ PUSH2 0x1D6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F5354415445 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH2 0x2C5D PUSH2 0x37D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 JUMP JUMPDEST PUSH2 0x2C99 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E941493D513D7D4105554D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x2D86 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D2727AA2FA222A62FA7A92FA0A226A4A7 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1602 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x715B09 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x715B090 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2F46 JUMPI PUSH1 0xD SLOAD PUSH2 0x2F3B SWAP1 DUP3 DUP7 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x2F46 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x2FA0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x2FB3 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xD393D18014C1898545668C52621BCED9493753BE5B8138F2539542CA606732EB SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3018 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3044 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x308F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x30BD DUP6 DUP5 PUSH2 0x33DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP2 ADD TIMESTAMP GT PUSH2 0x3120 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x140E9513D7D393D517D0531313D5D151 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x312B DUP7 PUSH2 0x201C JUMP JUMPDEST EQ PUSH2 0x316E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A5245434F475F4C4F53534553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3183 PUSH1 0x15 PUSH2 0x317C DUP7 PUSH2 0x20ED JUMP JUMPDEST DUP6 DUP8 PUSH2 0x389B JUMP JUMPDEST PUSH2 0x243E DUP6 DUP6 DUP6 PUSH2 0x3BD8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x320F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3230 CALLER PUSH2 0x1D0D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3254 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xFBC3A599B784FE88772FC5ABCC07223F64CA0B13ACC341F4FB1E46BEF0510EB4 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x318E JUMP JUMPDEST PUSH1 0xE DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD57 PUSH32 0x0 PUSH1 0xA EXP PUSH2 0x33D1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D69 AND JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x340B SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E9195539114D7D313D0D2D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3475 DUP3 PUSH2 0x1D33 DUP6 PUSH2 0x20ED JUMP JUMPDEST LT ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E925394D55197D514905394D7D09053 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x34C6 DUP3 DUP3 PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x34E3 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x356D PUSH2 0x3E52 JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 SWAP2 POP PUSH2 0x3583 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x358E PUSH2 0x39FA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35A1 JUMPI POP PUSH1 0x0 PUSH2 0xD57 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x35AE JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47A2 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x29A6AA9D27A7A1 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3641 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x3656 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3656 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x475B PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x534D493A4E4547 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36DC PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3720 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x372A JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH2 0x3761 PUSH2 0x3735 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3749 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3750 JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x6 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x26536799ACE2C3DBE12E638EC3ADE6B4173DCF1289BE0A58D51A5003015649BD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x1F8D7705F31C3337A080803A8AD7E71946FB88D84738879BE2BF402F97156E96 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x386A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x387E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP5 DUP5 ADD PUSH2 0x38C2 JUMPI DUP2 PUSH2 0x38F8 JUMP JUMPDEST PUSH2 0x38F8 PUSH2 0x38EB DUP7 DUP7 ADD PUSH2 0x33D1 DUP8 PUSH2 0x38DF TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF9B842C70D79466435B46540BB988AA5C998B3243BF91C36380DDB5887C0F0E4 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1AE7 SWAP1 DUP6 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x39B8 DUP3 DUP3 PUSH2 0x3F88 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x39D5 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0xF DUP1 SLOAD PUSH1 0xD SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A22 PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3A66 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x3A70 JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA9 PUSH2 0x3A7D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3A91 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3A98 JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x9 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP CALLER SWAP2 PUSH32 0xF88156A8032A0D2C65DF18FAFAF84E0BEA647B3D94A0F7FC6AB14C97DEC2BF74 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x240CE2B5CE9E9E5A70010C7F8034C233D89B7CE2D60F3A38D9BC3CA01A36F88C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x140E9393D517D11153 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1020 SWAP1 DUP5 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x3BE3 DUP4 DUP4 DUP4 PUSH2 0x3FD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BFD PUSH2 0x1C34 DUP4 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C2A SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C64 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3D19 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x3D2E JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3D2E JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4855 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x4100 JUMP JUMPDEST PUSH2 0x3DB5 DUP3 DUP3 PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3DD2 PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E5D CALLER PUSH2 0x201C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3E81 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0x814EBA35782909DBBAEEFB8104073DFCA45DE43173F7077970C1584B3CF918B5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F2C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x426D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1020 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4879 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3F92 DUP3 DUP3 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3FAF PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH2 0x3FDF DUP4 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 PUSH2 0x1C34 DUP4 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4026 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4060 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x414F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x415B JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47EB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41B6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x41F9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x46F1 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x4225 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x427C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x44E7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x42DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x42EB PUSH1 0x0 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x42FE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x432A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x43C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x480C PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x440A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x46CE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4415 DUP4 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x4458 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4735 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x448D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x4528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x477C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4531 DUP6 PUSH2 0x4643 JUMP JUMPDEST PUSH2 0x4582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x45C1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x45A2 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4623 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4628 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4638 DUP3 DUP3 DUP7 PUSH2 0x4649 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4658 JUMPI POP DUP2 PUSH2 0x15AC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4668 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E63655369676E PUSH6 0x64536166654D PUSH2 0x7468 GASPRICE KECCAK256 PUSH2 0x6464 PUSH10 0x74696F6E206F76657266 PUSH13 0x6F77416464726573733A20696E PUSH20 0x756666696369656E742062616C616E636520666F PUSH19 0x2063616C6C536166654D6174683A206D756C74 PUSH10 0x706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A207375627472616374696F6E206F766572666C PUSH16 0x775361666545524332303A2045524332 ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x75636365656445524332303A2064656372656173 PUSH6 0x6420616C6C6F PUSH24 0x616E63652062656C6F77207A65726FA26469706673582212 KECCAK256 0xEC JUMPI 0x2C SGT 0x2B DUP13 0x22 0xAD DUP4 0xF8 0x29 SWAP4 0x25 PUSH6 0xBE6106A16D99 0xCE 0x4D CHAINID PUSH32 0xF59C7503F0A88AD564736F6C634300060B003300000000000000000000000000 ",
              "sourceMap": "172000:21232:0:-:0;;;174628:1319;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;174628:1319:0;;;;;;;;;;-1:-1:-1;174628:1319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;174628:1319:0;;;;;;;;;;-1:-1:-1;174628:1319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;174951:4;174957:6;92587:4;92593:6;55323:4;55329:6;46060:4;46066:6;36123:5;36115;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;36138:17:0;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;36165:9:0;:14;;-1:-1:-1;;36165:14:0;36177:2;36165:14;;;-1:-1:-1;175036:7:0::1;::::0;-1:-1:-1;175036:24:0::1;::::0;-1:-1:-1;175061:20:0::1;::::0;-1:-1:-1;175070:10:0::1;::::0;-1:-1:-1;175061:8:0::1;::::0;-1:-1:-1;;175061:20:0:i:1;:::-;175036:103;::::0;;-1:-1:-1;175036:103:0;;;-1:-1:-1;;;;;;175036:103:0;;;-1:-1:-1;;;;;175036:103:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;175036:103:0;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;175211:48:0::1;::::0;;;;::::1;::::0;-1:-1:-1;175294:33:0::1;::::0;;-1:-1:-1;;;175294:33:0;;;;-1:-1:-1;;;;;175211:48:0;::::1;::::0;175294:31:::1;::::0;:33:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;175211:48;175294:33;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;175294:33:0;175269:58:::1;;;::::0;175373:26:::1;::::0;;;-1:-1:-1;;;;;;175373:26:0;;;::::1;::::0;175409:28;;;;::::1;::::0;175447:10:::1;:26:::0;;;175483:27:::1;::::0;;;175535:10:::1;175520:25:::0;::::1;;::::0;175555:12:::1;:28:::0;;;-1:-1:-1;175684:71:0;;-1:-1:-1;;;175684:71:0;;-1:-1:-1;;;;;175373:26:0;;::::1;175684:71;::::0;::::1;::::0;;;::::1;::::0;;;;;;:41;;::::1;::::0;::::1;::::0;:71;;;;;-1:-1:-1;;175684:71:0;;;;;;;;-1:-1:-1;175684:41:0;:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;175684:71:0;175658:98:::1;::::0;-1:-1:-1;;;;;;175658:98:0;::::1;::::0;175792:62:::1;::::0;;-1:-1:-1;;;175792:62:0;;-1:-1:-1;;;;;175792:62:0;;::::1;;::::0;::::1;::::0;;;:45;;::::1;::::0;::::1;::::0;:62;;;;;175684:71:::1;::::0;175792:62;;;;;;;;-1:-1:-1;175792:45:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;175792:62:0;175766:89:::1;::::0;-1:-1:-1;;;;;;175766:89:0;::::1;::::0;175881:8:::1;175866:12;:23:::0;175905:35:::1;::::0;;175922:17:::1;175905:35:::0;;;;::::1;::::0;::::1;::::0;;;;;;::::1;174628:1319:::0;;;;;;;;;;172000:21232;;191530:151;191592:13;191651:11;-1:-1:-1;;;;;191638:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;191638:35:0;;191530:151;-1:-1:-1;;191530:151:0:o;172000:21232::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;172000:21232:0;;;-1:-1:-1;172000:21232:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {
                "5885": [
                  {
                    "length": 32,
                    "start": 3611
                  },
                  {
                    "length": 32,
                    "start": 4135
                  },
                  {
                    "length": 32,
                    "start": 4981
                  },
                  {
                    "length": 32,
                    "start": 5098
                  },
                  {
                    "length": 32,
                    "start": 7930
                  },
                  {
                    "length": 32,
                    "start": 9101
                  },
                  {
                    "length": 32,
                    "start": 9989
                  },
                  {
                    "length": 32,
                    "start": 11234
                  },
                  {
                    "length": 32,
                    "start": 11737
                  },
                  {
                    "length": 32,
                    "start": 11805
                  },
                  {
                    "length": 32,
                    "start": 12115
                  },
                  {
                    "length": 32,
                    "start": 14294
                  }
                ],
                "5888": [
                  {
                    "length": 32,
                    "start": 3651
                  },
                  {
                    "length": 32,
                    "start": 4685
                  },
                  {
                    "length": 32,
                    "start": 6988
                  },
                  {
                    "length": 32,
                    "start": 11595
                  },
                  {
                    "length": 32,
                    "start": 15144
                  }
                ],
                "5891": [
                  {
                    "length": 32,
                    "start": 3975
                  },
                  {
                    "length": 32,
                    "start": 4769
                  },
                  {
                    "length": 32,
                    "start": 9488
                  },
                  {
                    "length": 32,
                    "start": 10024
                  },
                  {
                    "length": 32,
                    "start": 11276
                  },
                  {
                    "length": 32,
                    "start": 12149
                  },
                  {
                    "length": 32,
                    "start": 12972
                  },
                  {
                    "length": 32,
                    "start": 14341
                  }
                ],
                "5894": [
                  {
                    "length": 32,
                    "start": 3571
                  },
                  {
                    "length": 32,
                    "start": 8799
                  },
                  {
                    "length": 32,
                    "start": 11885
                  }
                ],
                "5897": [
                  {
                    "length": 32,
                    "start": 3207
                  },
                  {
                    "length": 32,
                    "start": 3691
                  },
                  {
                    "length": 32,
                    "start": 4727
                  },
                  {
                    "length": 32,
                    "start": 4850
                  },
                  {
                    "length": 32,
                    "start": 5023
                  },
                  {
                    "length": 32,
                    "start": 5145
                  },
                  {
                    "length": 32,
                    "start": 11845
                  }
                ],
                "5900": [
                  {
                    "length": 32,
                    "start": 3423
                  },
                  {
                    "length": 32,
                    "start": 3496
                  },
                  {
                    "length": 32,
                    "start": 3935
                  },
                  {
                    "length": 32,
                    "start": 6574
                  },
                  {
                    "length": 32,
                    "start": 7889
                  },
                  {
                    "length": 32,
                    "start": 9137
                  },
                  {
                    "length": 32,
                    "start": 11381
                  },
                  {
                    "length": 32,
                    "start": 12320
                  }
                ],
                "5902": [
                  {
                    "length": 32,
                    "start": 13207
                  }
                ],
                "5908": [
                  {
                    "length": 32,
                    "start": 4409
                  },
                  {
                    "length": 32,
                    "start": 7273
                  },
                  {
                    "length": 32,
                    "start": 9796
                  }
                ]
              },
              "linkReferences": {
                "contracts/core/pool/v1/PoolFactory.sol": {
                  "PoolLib": [
                    {
                      "length": 20,
                      "start": 3467
                    },
                    {
                      "length": 20,
                      "start": 4039
                    },
                    {
                      "length": 20,
                      "start": 4379
                    },
                    {
                      "length": 20,
                      "start": 5750
                    },
                    {
                      "length": 20,
                      "start": 6178
                    },
                    {
                      "length": 20,
                      "start": 7860
                    },
                    {
                      "length": 20,
                      "start": 8318
                    },
                    {
                      "length": 20,
                      "start": 9074
                    },
                    {
                      "length": 20,
                      "start": 10213
                    },
                    {
                      "length": 20,
                      "start": 11940
                    }
                  ]
                }
              },
              "object": "608060405234801561001057600080fd5b50600436106103fb5760003560e01c806370a0823111610215578063a9059cbb11610125578063c771c390116100b8578063d82745c811610087578063d82745c814610bfa578063dd62ed3e14610c20578063ee947a7c14610c4e578063eff9884314610c56578063fec984e314610c5e576103fb565b8063c771c39014610b79578063c965b54814610b96578063cc0fef0214610bc4578063d7bd3c9114610bcc576103fb565b8063b69410de116100f4578063b69410de14610acf578063b6b55f2514610ad7578063c374682514610af4578063c59e395914610b53576103fb565b8063a9059cbb14610a4f578063ac64165514610a7b578063aed4966a14610a83578063af6d557114610aa9576103fb565b806384b76824116101a85780639759164a116101775780639759164a146109ec5780639f3c7325146109f4578063a33142f7146109fc578063a43baa3d14610a04578063a457c2d714610a23576103fb565b806384b76824146109885780638905fd4f146109905780639185192a146109b657806395d89b41146109e4576103fb565b806376687d3d116101e457806376687d3d1461093e5780637b99adb11461094657806380cd916d1461096357806380e7ce851461096b576103fb565b806370a08231146108da57806371073bac1461090057806373ef9a50146109085780637666f12514610910576103fb565b80632e1a7d4d1161031057806346c162de116102a357806351b42b001161027257806351b42b001461081c578063613384f214610824578063641ad8a91461084a5780636696779114610876578063681cb10a1461089c576103fb565b806346c162de146107de5780634bb278f3146107e65780634e97415f146107ee5780634f85221a14610814576103fb565b806340504ba0116102df57806340504ba01461074757806340bde09814610775578063410dbf7e1461079b578063443bb293146107b8576103fb565b80632e1a7d4d146106ee578063313ce5671461070b57806339509351146107135780634046af2b1461073f576103fb565b80631831ccf21161039357806323b872dd1161036257806323b872dd1461062857806324600fc31461065e57806324b92e8e1461066657806327f918561461068c5780632ac04ac8146106b8576103fb565b80631831ccf21461057a5780631aa37cec14610582578063209b2bca146105ba57806321c0b342146105c2576103fb565b80630d49b38c116103cf5780630d49b38c1461051957806313bf9e7e14610521578063174a5be41461055457806318160ddd14610572576103fb565b806241c52c14610400578063033b1cf01461043857806306fdde031461045c578063095ea7b3146104d9575b600080fd5b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610c66565b60408051918252519081900360200190f35b610440610c85565b604080516001600160a01b039092168252519081900360200190f35b610464610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610505600480360360408110156104ef57600080fd5b506001600160a01b038135169060200135610d3f565b604080519115158252519081900360200190f35b610440610d5d565b610529610d81565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b61055c610f04565b6040805160ff9092168252519081900360200190f35b610426610f09565b610505610f0f565b6105b86004803603606081101561059857600080fd5b506001600160a01b03813581169160208101359091169060400135610f18565b005b610440611025565b6105f0600480360360408110156105d857600080fd5b506001600160a01b0381358116916020013516611049565b604051808260e080838360005b838110156106155781810151838201526020016105fd565b5050505090500191505060405180910390f35b6105056004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611525565b6105b86115b3565b6104266004803603602081101561067c57600080fd5b50356001600160a01b0316611607565b6105b8600480360360408110156106a257600080fd5b506001600160a01b038135169060200135611619565b6105b8600480360360608110156106ce57600080fd5b506001600160a01b038135811691602081013590911690604001356117ba565b6105b86004803603602081101561070457600080fd5b5035611991565b61055c611aed565b6105056004803603604081101561072957600080fd5b506001600160a01b038135169060200135611af6565b610440611b4a565b6105b86004803603604081101561075d57600080fd5b506001600160a01b0381358116916020013516611b6e565b6104266004803603602081101561078b57600080fd5b50356001600160a01b0316611bef565b6105b8600480360360208110156107b157600080fd5b5035611c58565b610426600480360360208110156107ce57600080fd5b50356001600160a01b0316611d0d565b6105b8611d3f565b6105b8611d6d565b6104266004803603602081101561080457600080fd5b50356001600160a01b0316611e3b565b610505611e80565b6105b8611ea0565b6105056004803603602081101561083a57600080fd5b50356001600160a01b0316611ff9565b61085261200e565b6040518082600281111561086257fe5b60ff16815260200191505060405180910390f35b6104266004803603602081101561088c57600080fd5b50356001600160a01b031661201c565b610426600480360360808110156108b257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612042565b610426600480360360208110156108f057600080fd5b50356001600160a01b03166120ed565b610426612108565b6105b861210e565b6105b86004803603604081101561092657600080fd5b506001600160a01b03813516906020013515156121a4565b61042661220c565b6105b86004803603602081101561095c57600080fd5b5035612212565b61044061225d565b6105056004803603602081101561098157600080fd5b5035612281565b6105b86122d4565b6105b8600480360360208110156109a657600080fd5b50356001600160a01b0316612370565b6105b8600480360360408110156109cc57600080fd5b506001600160a01b0381351690602001351515612445565b6104646124ad565b61044061250e565b610426612532565b610426612538565b6105b860048036036020811015610a1a57600080fd5b5035151561253e565b61050560048036036040811015610a3957600080fd5b506001600160a01b03813516906020013561258d565b61050560048036036040811015610a6557600080fd5b506001600160a01b0381351690602001356125fb565b61042661260f565b61042660048036036020811015610a9957600080fd5b50356001600160a01b0316612615565b61042660048036036020811015610abf57600080fd5b50356001600160a01b0316612630565b610426612642565b6105b860048036036020811015610aed57600080fd5b5035612666565b610b3a600480360360a0811015610b0a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356127a0565b6040805192835260208301919091528051918290030190f35b61050560048036036020811015610b6957600080fd5b50356001600160a01b031661285d565b6105b860048036036020811015610b8f57600080fd5b5035612872565b61042660048036036040811015610bac57600080fd5b506001600160a01b03813581169160200135166128fa565b6105b8612917565b61044060048036036040811015610be257600080fd5b506001600160a01b0381358116916020013516612942565b61042660048036036020811015610c1057600080fd5b50356001600160a01b0316612968565b61042660048036036040811015610c3657600080fd5b506001600160a01b038135811691602001351661297a565b6104266129a5565b6104266129ab565b6104266129b1565b6001600160a01b0381166000908152600860205260409020545b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6129b7565b84846129bb565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63767f5038610dcc7f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6040805160e084901b6001600160e01b03191681526001600160a01b0392831660048201527f0000000000000000000000000000000000000000000000000000000000000000831660248201527f0000000000000000000000000000000000000000000000000000000000000000831660448201527f0000000000000000000000000000000000000000000000000000000000000000831660648201527f000000000000000000000000000000000000000000000000000000000000000090921660848301525160a48083019260a0929190829003018186803b158015610eb257600080fd5b505af4158015610ec6573d6000803e3d6000fd5b505050506040513d60a0811015610edc57600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b600181565b60025490565b60145460ff1681565b610f20612b14565b610f2a6001612b24565b601154610f3d908263ffffffff612b8616565b6011556040805163fbecb17160e01b8152601660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528416608482015260a48101839052905173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163fbecb1719160c4808301926000929190829003018186803b15801561100057600080fd5b505af4158015611014573d6000803e3d6000fd5b50505050611020612be0565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110516146af565b611059612c70565b611061612d40565b6001600160a01b0380841660009081526016602090815260408083208685168452909152808220548151634e71d92d60e01b81529151931692634e71d92d9260048084019360e093929083900390910190829087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156110fc57600080fd5b50601054604051633faa6c5d60e01b815291925060009182918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91633faa6c5d9188917f00000000000000000000000000000000000000000000000000000000000000009190600401808460e08083838c5b8381101561117e578181015183820152602001611166565b50505050905001838152602001828152602001935050505060806040518083038186803b1580156111ae57600080fd5b505af41580156111c2573d6000803e3d6000fd5b505050506040513d60808110156111d857600080fd5b50805160208201516040830151606090930151601154929750909550919350909150821161120e57601180548390039055611232565b601154611224908290840363ffffffff612b8616565b601180546000909155925090505b600c54611245908263ffffffff612b8616565b600c556112727f000000000000000000000000000000000000000000000000000000000000000085612dcc565b61129c7f000000000000000000000000000000000000000000000000000000000000000084612dcc565b6112d57f00000000000000000000000000000000000000000000000000000000000000006112d0848463ffffffff612b8616565b612dcc565b60c0850151156112f0576112f0878660066020020151612e06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c162de6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b5050505061136b611d3f565b611373612be0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d60208110156114a857600080fd5b505160408051918252519081900360200190a36060808601516040805184815260208101869052808201929092529181018590526080810186905290516001600160a01b038916917f21280d282ce6aa29c649fd1825373d7c77892fac3f1958fd98d5ca52dd82a197919081900360a00190a25050505092915050565b6000611532848484613010565b6115a88461153e6129b7565b6115a3856040518060600160405280602881526020016147c3602891396001600160a01b038a1660009081526001602052604081209061157c6129b7565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61318e16565b6129bb565b5060015b9392505050565b6115bb612c70565b60006115c5613225565b9050806115d25750611605565b6115dc33826132aa565b6115e4612be0565b600c546115f7908263ffffffff61332a16565b600c5561160261336c565b50505b565b60156020526000908152604090205481565b336000908152601a602090815260408083206001600160a01b03861684529091528120549061164e828463ffffffff612b8616565b336000908152601b602052604081205491925090611672908563ffffffff612b8616565b905073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63297e7bf786868461169a336120ed565b6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200182815260200194505050505060006040518083038186803b1580156116f557600080fd5b505af4158015611709573d6000803e3d6000fd5b5050336000818152601a602090815260408083206001600160a01b038c16808552908352818420899055848452601b835292819020879055805189815291820188905280519295509293507f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e892908290030190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b0383166000908152601a60209081526040808320338452909152812054906117ef828463ffffffff61332a16565b60408051631b4c903160e01b81526001600160a01b0380891660048301528716602482015260448101869052905191925073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91631b4c903191606480820192600092909190829003018186803b15801561185c57600080fd5b505af4158015611870573d6000803e3d6000fd5b505050506001600160a01b0385166000818152601a602090815260408083203384528252808320859055928252601b9052908120546118af908561332a565b6001600160a01b038088166000818152601b60209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b611999612c70565b60006119a482613390565b90506000806119d27f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6040811015611a3357600080fd5b5080516020909101519092509050611a4b33846133dd565b3360009081526019602052604090205482014203811015611aac576040805162461bcd60e51b8152602060048201526016602482015275140e95d2551211149055d7d393d517d0531313d5d15160521b604482015290519081900360640190fd5b611ab633846134bc565b611abe6115b3565b611adf33611ada611acd613563565b879063ffffffff61332a16565b6132aa565b611ae7612be0565b50505050565b60055460ff1690565b6000610d53611b036129b7565b846115a38560016000611b146129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b8616565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b76612b14565b6001600160a01b038083166000908152601660209081526040808320858516845290915280822054815163175f832960e01b8152915193169263175f83299260048084019391929182900301818387803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90611c4a90611c4590611c39611c34611c25886120ed565b6009549063ffffffff61359216565b6135eb565b9063ffffffff61362c16565b613691565b81611c5157fe5b0492915050565b611c60612b14565b612710611c93827f000000000000000000000000000000000000000000000000000000000000000063ffffffff612b8616565b1115611cd2576040805162461bcd60e51b8152602060048201526009602482015268503a4241445f46454560b81b604482015290519081900360640190fd5b60108190556040805182815290517f9408bb8c08d29b335e36090045074610352365476d9df02e203c25db4fcd67c09181900360200190a150565b6001600160a01b038116600090815260086020526040812054610d5790611d3384611e3b565b9063ffffffff61332a16565b6000611d4961336c565b905060008113611d595750611605565b611d6a611d6582613691565b6136d2565b50565b611d75612b14565b611d7f6000612b24565b6000611d89610d81565b50509250505080611dd1576040805162461bcd60e51b815260206004820152600d60248201526c503a494e5355465f5354414b4560981b604482015290519081900360640190fd5b601480546001919061ff0019166101008302179055506014546040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a91610100900460ff169080826002811115611e2557fe5b60ff16815260200191505060405180910390a150565b6001600160a01b038116600090815260076020526040812054600160801b90611c4a90611c4590611c39611c34611e71886120ed565b6006549063ffffffff61359216565b60006001601454610100900460ff166002811115611e9a57fe5b14905090565b611ea8612b14565b611eb26001612b24565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63abbedb40611ef57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6011547f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b03168152602001935050505060006040518083038186803b158015611f7f57600080fd5b505af4158015611f93573d6000803e3d6000fd5b50506014805461ff00191661020017908190556040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a935061010090910460ff16915080826002811115611fe457fe5b60ff16815260200191505060405180910390a1565b60176020526000908152604090205460ff1681565b601454610100900460ff1681565b6001600160a01b0381166000908152600b6020526040812054610d5790611d3384611bef565b6040805163340e588560e11b81526001600160a01b0380871660048301528086166024830152808516604483015283166064820152905160009173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163681cb10a91608480820192602092909190829003018186803b1580156120b857600080fd5b505af41580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505195945050505050565b6001600160a01b031660009081526020819052604090205490565b600c5481565b6000612119336120ed565b1415612159576040805162461bcd60e51b815260206004820152600a602482015269140e96915493d7d0905360b21b604482015290519081900360640190fd5b336000818152601960209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6121ac612b14565b6001600160a01b038216600081815260186020908152604091829020805460ff1916851515908117909155825190815291517fdf56132520665b33cd5731c5cfbacd8bee82524e67df563bb25b2be304f91d449281900390910190a25050565b60125481565b61221a612c70565b612222612d40565b60128190556040805182815290517f3ff20538222f568f27ff436c0c49dfd3e48d5b8f86533a3f759dc1c7089775ab9181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145460009060ff16806122a457503360009081526018602052604090205460ff165b8015610d5757506012546122cc836122c06011546122c06137d2565b9063ffffffff612b8616565b111592915050565b33600090815260196020526040902054612329576040805162461bcd60e51b8152602060048201526011602482015270503a4e4f545f5749544844524157494e4760781b604482015290519081900360640190fd5b3360008181526019602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63a89d5ddb827f00000000000000000000000000000000000000000000000000000000000000006123d57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015290516064808301926000929190829003018186803b15801561242a57600080fd5b505af415801561243e573d6000803e3d6000fd5b5050505050565b61244d612b14565b6001600160a01b038216600081815260176020908152604091829020805460ff1916851515908117909155825190815291517f353578bbc0ab907b7018b0f7b50b5f822d31dc9fcf4c16fffa780e109ca7c9309281900390910190a25050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b600d5481565b612546612b14565b6014805482151560ff19909116811790915560408051918252517feeba6fd794e30165023f7e3d017e92901622076a95d36e45906955e025ff4fe79181900360200190a150565b6000610d5361259a6129b7565b846115a3856040518060600160405280602581526020016148a360259139600160006125c46129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61318e16565b6000610d536126086129b7565b8484613010565b60115481565b6001600160a01b03166000908152600b602052604090205490565b601b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61266e612c70565b6126786001612b24565b61268181612281565b6126c6576040805162461bcd60e51b8152602060048201526011602482015270140e91115417d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b3360009081526019602052604081208190556126e182613390565b90506126f860156126f1336120ed565b833361389b565b6127536001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61395416565b61275d33826139ae565b612765612be0565b6040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a25050565b6040805163c374682560e01b81526001600160a01b0380881660048301528087166024830152808616604483015284166064820152608481018390528151600092839273__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9263c37468259260a480840193919291829003018186803b15801561281c57600080fd5b505af4158015612830573d6000803e3d6000fd5b505050506040513d604081101561284657600080fd5b508051602090910151909890975095505050505050565b60186020526000908152604090205460ff1681565b61287a612b14565b6013548111156128bf576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f56414c554560a81b604482015290519081900360640190fd5b60138190556040805182815290517f3094b4ce0463766c3cd81ed2ae2451610dcac39a1061fa023ca9d3d4df959f759181900360200190a150565b601a60209081526000928352604080842090915290825290205481565b60006129216139fa565b9050600081136129315750611605565b611d6a61293d82613691565b613a18565b60166020908152600092835260408084209091529082529020546001600160a01b031681565b60196020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60135481565b60105481565b600f5481565b3390565b6001600160a01b038316612a005760405162461bcd60e51b81526004018080602001828103825260248152602001806148316024913960400191505060405180910390fd5b6001600160a01b038216612a455760405162461bcd60e51b81526004018080602001828103825260228152602001806147136022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d6020811015612b0c57600080fd5b505192915050565b612b1c613b1d565b611605612c70565b806002811115612b3057fe5b601454610100900460ff166002811115612b4657fe5b14611d6a576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f535441544560a81b604482015290519081900360640190fd5b6000828201838110156115ac576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a2612c5d6137d2565b60408051918252519081900360200190a3565b612c997f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b158015612cd157600080fd5b505afa158015612ce5573d6000803e3d6000fd5b505050506040513d6020811015612cfb57600080fd5b505115611605576040805162461bcd60e51b815260206004820152600e60248201526d140e941493d513d7d4105554d15160921b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612d8657503360009081526017602052604090205460ff165b611605576040805162461bcd60e51b8152602060048201526012602482015271281d2727aa2fa222a62fa7a92fa0a226a4a760711b604482015290519081900360640190fd5b6116026001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff613b8616565b6040805162715b0960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526064810183905290516000918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91630715b09091608480820192606092909190829003018186803b158015612ede57600080fd5b505af4158015612ef2573d6000803e3d6000fd5b505050506040513d6060811015612f0857600080fd5b5080516020820151604090920151909450909250905080841115612f4657600d54612f3b9082860363ffffffff612b8616565b600d55612f46612917565b612fa06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008363ffffffff613b8616565b601154612fb3908563ffffffff61332a16565b60115560408051858152602081018590528082018490526060810183905290516001600160a01b038716917fd393d18014c1898545668c52621bced9493753be5b8138f2539542ca606732eb919081900360800190a25050505050565b613018612c70565b6000806130447f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b15801561307b57600080fd5b505afa15801561308f573d6000803e3d6000fd5b505050506040513d60408110156130a557600080fd5b50805160209091015190925090506130bd85846133dd565b6001600160a01b038416600090815260196020526040902054820181014211613120576040805162461bcd60e51b815260206004820152601060248201526f140e9513d7d393d517d0531313d5d15160821b604482015290519081900360640190fd5b600061312b8661201c565b1461316e576040805162461bcd60e51b815260206004820152600e60248201526d503a5245434f475f4c4f5353455360901b604482015290519081900360640190fd5b613183601561317c866120ed565b858761389b565b61243e858585613bd8565b6000818484111561321d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131e25781810151838201526020016131ca565b50505050905090810190601f16801561320f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061323033611d0d565b3360009081526008602052604081205491925090613254908363ffffffff612b8616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611bd357600080fd5b60006115ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061318e565b600e8054600c549182905560009161338a908263ffffffff613d0416565b91505090565b6000610d577f0000000000000000000000000000000000000000000000000000000000000000600a0a6133d184670de0b6b3a764000063ffffffff61359216565b9063ffffffff613d6916565b6013546001600160a01b038316600090815260156020526040902054429161340b919063ffffffff612b8616565b111561344f576040805162461bcd60e51b815260206004820152600e60248201526d140e9195539114d7d313d0d2d15160921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205461347582611d33856120ed565b1015611602576040805162461bcd60e51b8152602060048201526011602482015270140e925394d55197d514905394d7d09053607a1b604482015290519081900360640190fd5b6134c68282613dab565b60006135086134e3611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b600061356d613e52565b600d54909150613583908263ffffffff61332a16565b600d5561358e6139fa565b5090565b6000826135a157506000610d57565b828202828482816135ae57fe5b04146115ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806147a26021913960400191505060405180910390fd5b806000811215610c80576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b60008282018183128015906136415750838112155b80613656575060008312801561365657508381125b6115ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061475b6021913960400191505060405180910390fd5b60008082121561358e576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b60006136dc610f09565b11613720576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b8061372a57611d6a565b613761613735610f09565b61374983600160801b63ffffffff61359216565b8161375057fe5b60065491900463ffffffff612b8616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561386a57600080fd5b505afa15801561387e573d6000803e3d6000fd5b505050506040513d602081101561389457600080fd5b5051905090565b6001600160a01b038116600090815260208590526040812054908484016138c257816138f8565b6138f86138eb8686016133d1876138df428863ffffffff61332a16565b9063ffffffff61359216565b839063ffffffff612b8616565b6001600160a01b038416600081815260208981526040918290208490558151848152915193945091927ff9b842c70d79466435b46540bb988aa5c998b3243bf91c36380ddb5887c0f0e4929181900390910190a2505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ae7908590613ed7565b6139b88282613f88565b60006135086139d5611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff613d0416565b600f8054600d549182905560009161338a908263ffffffff613d0416565b6000613a22610f09565b11613a66576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80613a7057611d6a565b6000613aa9613a7d610f09565b613a9184600160801b63ffffffff61359216565b81613a9857fe5b60095491900463ffffffff612b8616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611605576040805162461bcd60e51b8152602060048201526009602482015268140e9393d517d1115360ba1b604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611020908490613ed7565b613be3838383613fd4565b6000613bfd611c348360095461359290919063ffffffff16565b6001600160a01b0385166000908152600a602052604081205491925090613c2a908363ffffffff61362c16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613c64908463ffffffff613d0416565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6000818303818312801590613d195750838113155b80613d2e5750600083128015613d2e57508381135b6115ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806148556024913960400191505060405180910390fd5b60006115ac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b613db58282614165565b6000613df7613dd2611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b6000613e5d3361201c565b336000908152600b602052604081205491925090613e81908363ffffffff612b8616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6060613f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661426d9092919063ffffffff16565b80519091501561102057808060200190516020811015613f4b57600080fd5b50516110205760405162461bcd60e51b815260040180806020018281038252602a815260200180614879602a913960400191505060405180910390fd5b613f928282614284565b6000613df7613faf611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff613d0416565b613fdf838383614380565b6000613ff9611c348360065461359290919063ffffffff16565b6001600160a01b03851660009081526007602052604081205491925090614026908363ffffffff61362c16565b6001600160a01b0380871660009081526007602052604080822084905591871681529081205491925090614060908463ffffffff613d0416565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b6000818361414f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131e25781810151838201526020016131ca565b50600083858161415b57fe5b0495945050505050565b6001600160a01b0382166141aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806147eb6021913960400191505060405180910390fd5b6141b682600083611020565b6141f9816040518060600160405280602281526020016146f1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b038316600090815260208190526040902055600254614225908263ffffffff61332a16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b606061427c84846000856144e7565b949350505050565b6001600160a01b0382166142df576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6142eb60008383611020565b6002546142fe908263ffffffff612b8616565b6002556001600160a01b03821660009081526020819052604090205461432a908263ffffffff612b8616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166143c55760405162461bcd60e51b815260040180806020018281038252602581526020018061480c6025913960400191505060405180910390fd5b6001600160a01b03821661440a5760405162461bcd60e51b81526004018080602001828103825260238152602001806146ce6023913960400191505060405180910390fd5b614415838383611020565b61445881604051806060016040528060268152602001614735602691396001600160a01b038616600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461448d908263ffffffff612b8616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6060824710156145285760405162461bcd60e51b815260040180806020018281038252602681526020018061477c6026913960400191505060405180910390fd5b61453185614643565b614582576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614623576040519150601f19603f3d011682016040523d82523d6000602084013e614628565b606091505b5091509150614638828286614649565b979650505050505050565b3b151590565b606083156146585750816115ac565b8251156146685782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156131e25781810151838201526020016131ca565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec572c132b8c22ad83f829932565be6106a16d99ce4d467ff59c7503f0a88ad564736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xC771C390 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD82745C8 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD82745C8 EQ PUSH2 0xBFA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC20 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0xC4E JUMPI DUP1 PUSH4 0xEFF98843 EQ PUSH2 0xC56 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0xC5E JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xC771C390 EQ PUSH2 0xB79 JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0xBC4 JUMPI DUP1 PUSH4 0xD7BD3C91 EQ PUSH2 0xBCC JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xB69410DE GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB69410DE EQ PUSH2 0xACF JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0xAF4 JUMPI DUP1 PUSH4 0xC59E3959 EQ PUSH2 0xB53 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0xAC641655 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0xA83 JUMPI DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0xAA9 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x9759164A GT PUSH2 0x177 JUMPI DUP1 PUSH4 0x9759164A EQ PUSH2 0x9EC JUMPI DUP1 PUSH4 0x9F3C7325 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xA33142F7 EQ PUSH2 0x9FC JUMPI DUP1 PUSH4 0xA43BAA3D EQ PUSH2 0xA04 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xA23 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 EQ PUSH2 0x988 JUMPI DUP1 PUSH4 0x8905FD4F EQ PUSH2 0x990 JUMPI DUP1 PUSH4 0x9185192A EQ PUSH2 0x9B6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x9E4 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x76687D3D GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x76687D3D EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x7B99ADB1 EQ PUSH2 0x946 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0x80E7CE85 EQ PUSH2 0x96B JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8DA JUMPI DUP1 PUSH4 0x71073BAC EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0x73EF9A50 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0x7666F125 EQ PUSH2 0x910 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x51B42B00 GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x51B42B00 EQ PUSH2 0x81C JUMPI DUP1 PUSH4 0x613384F2 EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0x641AD8A9 EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x876 JUMPI DUP1 PUSH4 0x681CB10A EQ PUSH2 0x89C JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x7DE JUMPI DUP1 PUSH4 0x4BB278F3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x7EE JUMPI DUP1 PUSH4 0x4F85221A EQ PUSH2 0x814 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x40504BA0 GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x40504BA0 EQ PUSH2 0x747 JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x410DBF7E EQ PUSH2 0x79B JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x7B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x4046AF2B EQ PUSH2 0x73F JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x24B92E8E EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x68C JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x6B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0x1AA37CEC EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0x21C0B342 EQ PUSH2 0x5C2 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xD49B38C GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0xD49B38C EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x13BF9E7E EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x572 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x33B1CF0 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x4D9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC66 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x464 PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x486 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4CB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x529 PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x55C PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x505 PUSH2 0xF0F JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF18 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x440 PUSH2 0x1025 JUMP JUMPDEST PUSH2 0x5F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xE0 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1525 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1607 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1619 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x17BA JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x1AED JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x1B4A JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D6D JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E3B JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1E80 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1EA0 JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x83A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1FF9 JUMP JUMPDEST PUSH2 0x852 PUSH2 0x200E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x862 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x201C JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x2042 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2108 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x210E JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x220C JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2212 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x981 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x22D4 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2370 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2445 JUMP JUMPDEST PUSH2 0x464 PUSH2 0x24AD JUMP JUMPDEST PUSH2 0x440 PUSH2 0x250E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x253E JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x258D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x260F JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2615 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2642 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2666 JUMP JUMPDEST PUSH2 0xB3A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x285D JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2872 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x28FA JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x2942 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2968 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x297A JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29AB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD18 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0xD4C PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0x0 PUSH4 0x767F5038 PUSH2 0xDCC PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP5 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x0 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xEC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF20 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0xF2A PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xF3D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFBECB171 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x16 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0x0 SWAP2 PUSH4 0xFBECB171 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1014 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1020 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1051 PUSH2 0x46AF JUMP JUMPDEST PUSH2 0x1059 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x1061 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x4E71D92D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x4E71D92D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 PUSH1 0xE0 SWAP4 SWAP3 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3FAA6C5D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x3FAA6C5D SWAP2 DUP9 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0xE0 DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x117E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1166 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD PUSH1 0x11 SLOAD SWAP3 SWAP8 POP SWAP1 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP3 GT PUSH2 0x120E JUMPI PUSH1 0x11 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1232 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x1224 SWAP1 DUP3 SWAP1 DUP5 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x0 SWAP1 SWAP2 SSTORE SWAP3 POP SWAP1 POP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1245 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1272 PUSH32 0x0 DUP6 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x129C PUSH32 0x0 DUP5 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x12D5 PUSH32 0x0 PUSH2 0x12D0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH2 0x2DCC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD ISZERO PUSH2 0x12F0 JUMPI PUSH2 0x12F0 DUP8 DUP7 PUSH1 0x6 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x2E06 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x46C162DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x136B PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x1373 PUSH2 0x2BE0 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 PUSH1 0x60 DUP1 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH32 0x21280D282CE6AA29C649FD1825373D7C77892FAC3F1958FD98D5CA52DD82A197 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 LOG2 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1532 DUP5 DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH2 0x15A8 DUP5 PUSH2 0x153E PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x47C3 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x157C PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x15BB PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C5 PUSH2 0x3225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x15D2 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x15DC CALLER DUP3 PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x15E4 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x15F7 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1602 PUSH2 0x336C JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x164E DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1672 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST SWAP1 POP PUSH20 0x0 PUSH4 0x297E7BF7 DUP7 DUP7 DUP5 PUSH2 0x169A CALLER PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1709 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP10 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x1B DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP8 SWAP1 SSTORE DUP1 MLOAD DUP10 DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP6 POP SWAP3 SWAP4 POP PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x17EF DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B4C9031 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x1B4C9031 SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x1B SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x18AF SWAP1 DUP6 PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP10 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 DUP10 AND SWAP4 SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xFAA022EA2CD7F14157070896FABADAFE96CC4D4714EEF7AE6A992A5084493ED5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG4 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1999 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19A4 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x19D2 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1A4B CALLER DUP5 PUSH2 0x33DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD TIMESTAMP SUB DUP2 LT ISZERO PUSH2 0x1AAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x140E95D2551211149055D7D393D517D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1AB6 CALLER DUP5 PUSH2 0x34BC JUMP JUMPDEST PUSH2 0x1ABE PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x1ADF CALLER PUSH2 0x1ADA PUSH2 0x1ACD PUSH2 0x3563 JUMP JUMPDEST DUP8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x1AE7 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x1B03 PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1B14 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B76 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x175F8329 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x175F8329 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1C25 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH2 0x35EB JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH2 0x3691 JUMP JUMPDEST DUP2 PUSH2 0x1C51 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C60 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x1C93 DUP3 PUSH32 0x0 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1CD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x503A4241445F464545 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x9408BB8C08D29B335E36090045074610352365476D9DF02E203C25DB4FCD67C0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1E3B JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D49 PUSH2 0x336C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1D59 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x1D65 DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x36D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D75 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1D7F PUSH1 0x0 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D89 PUSH2 0xD81 JUMP JUMPDEST POP POP SWAP3 POP POP POP DUP1 PUSH2 0x1DD1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x503A494E5355465F5354414B45 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x14 SLOAD PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E25 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1E71 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E9A JUMPI INVALID JUMPDEST EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA8 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1EB2 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xABBEDB40 PUSH2 0x1EF5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH32 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x14 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x200 OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP4 POP PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP2 POP DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FE4 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1BEF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x340E5885 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x681CB10A SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2119 CALLER PUSH2 0x20ED JUMP JUMPDEST EQ ISZERO PUSH2 0x2159 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x140E96915493D7D09053 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 DUP2 SWAP1 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH2 0x21AC PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xDF56132520665B33CD5731C5CFBACD8BEE82524E67DF563BB25B2BE304F91D44 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x221A PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2222 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x12 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3FF20538222F568F27FF436C0C49DFD3E48D5B8F86533A3F759DC1C7089775AB SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x22A4 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 ISZERO PUSH2 0xD57 JUMPI POP PUSH1 0x12 SLOAD PUSH2 0x22CC DUP4 PUSH2 0x22C0 PUSH1 0x11 SLOAD PUSH2 0x22C0 PUSH2 0x37D2 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x503A4E4F545F5749544844524157494E47 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE DUP1 MLOAD SWAP3 DUP4 MSTORE MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xA89D5DDB DUP3 PUSH32 0x0 PUSH2 0x23D5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x242A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x243E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x244D PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x353578BBC0AB907B7018B0F7B50B5F822D31DC9FCF4C16FFFA780E109CA7C930 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2546 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x14 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xEEBA6FD794E30165023F7E3D017E92901622076A95D36E45906955E025FF4FE7 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x259A PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x48A3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x25C4 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x2608 PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x266E PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2678 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH2 0x2681 DUP2 PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x26C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E91115417D393D517D0531313D5D151 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x26E1 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH2 0x26F8 PUSH1 0x15 PUSH2 0x26F1 CALLER PUSH2 0x20ED JUMP JUMPDEST DUP4 CALLER PUSH2 0x389B JUMP JUMPDEST PUSH2 0x2753 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER PUSH32 0x0 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x3954 AND JUMP JUMPDEST PUSH2 0x275D CALLER DUP3 PUSH2 0x39AE JUMP JUMPDEST PUSH2 0x2765 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3746825 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH20 0x0 SWAP3 PUSH4 0xC3746825 SWAP3 PUSH1 0xA4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x287A PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 GT ISZERO PUSH2 0x28BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F56414C5545 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3094B4CE0463766C3CD81ED2AE2451610DCAC39A1061FA023CA9D3D4DF959F75 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2921 PUSH2 0x39FA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x2931 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x293D DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x3A18 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2A00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4831 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4713 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B1C PUSH2 0x3B1D JUMP JUMPDEST PUSH2 0x1605 PUSH2 0x2C70 JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B30 JUMPI INVALID JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B46 JUMPI INVALID JUMPDEST EQ PUSH2 0x1D6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F5354415445 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH2 0x2C5D PUSH2 0x37D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 JUMP JUMPDEST PUSH2 0x2C99 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E941493D513D7D4105554D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x2D86 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D2727AA2FA222A62FA7A92FA0A226A4A7 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1602 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x715B09 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x715B090 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2F46 JUMPI PUSH1 0xD SLOAD PUSH2 0x2F3B SWAP1 DUP3 DUP7 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x2F46 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x2FA0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x2FB3 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xD393D18014C1898545668C52621BCED9493753BE5B8138F2539542CA606732EB SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3018 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3044 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x308F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x30BD DUP6 DUP5 PUSH2 0x33DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP2 ADD TIMESTAMP GT PUSH2 0x3120 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x140E9513D7D393D517D0531313D5D151 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x312B DUP7 PUSH2 0x201C JUMP JUMPDEST EQ PUSH2 0x316E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A5245434F475F4C4F53534553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3183 PUSH1 0x15 PUSH2 0x317C DUP7 PUSH2 0x20ED JUMP JUMPDEST DUP6 DUP8 PUSH2 0x389B JUMP JUMPDEST PUSH2 0x243E DUP6 DUP6 DUP6 PUSH2 0x3BD8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x320F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3230 CALLER PUSH2 0x1D0D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3254 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xFBC3A599B784FE88772FC5ABCC07223F64CA0B13ACC341F4FB1E46BEF0510EB4 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x318E JUMP JUMPDEST PUSH1 0xE DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD57 PUSH32 0x0 PUSH1 0xA EXP PUSH2 0x33D1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D69 AND JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x340B SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E9195539114D7D313D0D2D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3475 DUP3 PUSH2 0x1D33 DUP6 PUSH2 0x20ED JUMP JUMPDEST LT ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E925394D55197D514905394D7D09053 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x34C6 DUP3 DUP3 PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x34E3 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x356D PUSH2 0x3E52 JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 SWAP2 POP PUSH2 0x3583 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x358E PUSH2 0x39FA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35A1 JUMPI POP PUSH1 0x0 PUSH2 0xD57 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x35AE JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47A2 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x29A6AA9D27A7A1 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3641 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x3656 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3656 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x475B PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x534D493A4E4547 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36DC PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3720 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x372A JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH2 0x3761 PUSH2 0x3735 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3749 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3750 JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x6 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x26536799ACE2C3DBE12E638EC3ADE6B4173DCF1289BE0A58D51A5003015649BD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x1F8D7705F31C3337A080803A8AD7E71946FB88D84738879BE2BF402F97156E96 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x386A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x387E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP5 DUP5 ADD PUSH2 0x38C2 JUMPI DUP2 PUSH2 0x38F8 JUMP JUMPDEST PUSH2 0x38F8 PUSH2 0x38EB DUP7 DUP7 ADD PUSH2 0x33D1 DUP8 PUSH2 0x38DF TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF9B842C70D79466435B46540BB988AA5C998B3243BF91C36380DDB5887C0F0E4 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1AE7 SWAP1 DUP6 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x39B8 DUP3 DUP3 PUSH2 0x3F88 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x39D5 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0xF DUP1 SLOAD PUSH1 0xD SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A22 PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3A66 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x3A70 JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA9 PUSH2 0x3A7D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3A91 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3A98 JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x9 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP CALLER SWAP2 PUSH32 0xF88156A8032A0D2C65DF18FAFAF84E0BEA647B3D94A0F7FC6AB14C97DEC2BF74 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x240CE2B5CE9E9E5A70010C7F8034C233D89B7CE2D60F3A38D9BC3CA01A36F88C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x140E9393D517D11153 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1020 SWAP1 DUP5 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x3BE3 DUP4 DUP4 DUP4 PUSH2 0x3FD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BFD PUSH2 0x1C34 DUP4 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C2A SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C64 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3D19 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x3D2E JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3D2E JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4855 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x4100 JUMP JUMPDEST PUSH2 0x3DB5 DUP3 DUP3 PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3DD2 PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E5D CALLER PUSH2 0x201C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3E81 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0x814EBA35782909DBBAEEFB8104073DFCA45DE43173F7077970C1584B3CF918B5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F2C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x426D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1020 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4879 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3F92 DUP3 DUP3 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3FAF PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH2 0x3FDF DUP4 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 PUSH2 0x1C34 DUP4 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4026 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4060 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x414F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x415B JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47EB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41B6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x41F9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x46F1 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x4225 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x427C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x44E7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x42DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x42EB PUSH1 0x0 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x42FE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x432A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x43C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x480C PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x440A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x46CE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4415 DUP4 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x4458 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4735 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x448D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x4528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x477C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4531 DUP6 PUSH2 0x4643 JUMP JUMPDEST PUSH2 0x4582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x45C1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x45A2 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4623 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4628 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4638 DUP3 DUP3 DUP7 PUSH2 0x4649 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4658 JUMPI POP DUP2 PUSH2 0x15AC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4668 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E63655369676E PUSH6 0x64536166654D PUSH2 0x7468 GASPRICE KECCAK256 PUSH2 0x6464 PUSH10 0x74696F6E206F76657266 PUSH13 0x6F77416464726573733A20696E PUSH20 0x756666696369656E742062616C616E636520666F PUSH19 0x2063616C6C536166654D6174683A206D756C74 PUSH10 0x706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A207375627472616374696F6E206F766572666C PUSH16 0x775361666545524332303A2045524332 ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x75636365656445524332303A2064656372656173 PUSH6 0x6420616C6C6F PUSH24 0x616E63652062656C6F77207A65726FA26469706673582212 KECCAK256 0xEC JUMPI 0x2C SGT 0x2B DUP13 0x22 0xAD DUP4 0xF8 0x29 SWAP4 0x25 PUSH6 0xBE6106A16D99 0xCE 0x4D CHAINID PUSH32 0xF59C7503F0A88AD564736F6C634300060B003300000000000000000000000000 ",
              "sourceMap": "172000:21232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48121:129;;;;;;;;;;;;;;;;-1:-1:-1;48121:129:0;-1:-1:-1;;;;;48121:129:0;;:::i;:::-;;;;;;;;;;;;;;;;172373:45;;;:::i;:::-;;;;-1:-1:-1;;;;;172373:45:0;;;;;;;;;;;;;;36251:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38287:166;;;;;;;;;;;;;;;;-1:-1:-1;38287:166:0;;-1:-1:-1;;;;;38287:166:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;172424:46;;;:::i;189653:258::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;172110:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37294:98;;;:::i;172824:33::-;;;:::i;176408:351::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;176408:351:0;;;;;;;;;;;;;;;;;:::i;:::-;;172162:47;;;:::i;176969:2732::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;176969:2732:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38920:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38920:317:0;;;;;;;;;;;;;;;;;:::i;186909:413::-;;;:::i;172902:75::-;;;;;;;;;;;;;;;;-1:-1:-1;172902:75:0;-1:-1:-1;;;;;172902:75:0;;:::i;187328:723::-;;;;;;;;;;;;;;;;-1:-1:-1;187328:723:0;;-1:-1:-1;;;;;187328:723:0;;;;;;:::i;188057:710::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;188057:710:0;;;;;;;;;;;;;;;;;:::i;185115:831::-;;;;;;;;;;;;;;;;-1:-1:-1;185115:831:0;;:::i;37153:81::-;;;:::i;39632:215::-;;;;;;;;;;;;;;;;-1:-1:-1;39632:215:0;;-1:-1:-1;;;;;39632:215:0;;;;;;:::i;172216:46::-;;;:::i;176765:198::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;176765:198:0;;;;;;;;;;:::i;57603:306::-;;;;;;;;;;;;;;;;-1:-1:-1;57603:306:0;-1:-1:-1;;;;;57603:306:0;;:::i;182393:270::-;;;;;;;;;;;;;;;;-1:-1:-1;182393:270:0;;:::i;47952:163::-;;;;;;;;;;;;;;;;-1:-1:-1;47952:163:0;-1:-1:-1;;;;;47952:163:0;;:::i;51297:205::-;;;:::i;176068:334::-;;;:::i;48256:305::-;;;;;;;;;;;;;;;;-1:-1:-1;48256:305:0;-1:-1:-1;;;;;48256:305:0;;:::i;190301:117::-;;;:::i;181412:317::-;;;:::i;173064:74::-;;;;;;;;;;;;;;;;-1:-1:-1;173064:74:0;-1:-1:-1;;;;;173064:74:0;;:::i;172864:31::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57291:167;;;;;;;;;;;;;;;;-1:-1:-1;57291:167:0;-1:-1:-1;;;;;57291:167:0;;:::i;189123:261::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;189123:261:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;37450:117::-;;;;;;;;;;;;;;;;-1:-1:-1;37450:117:0;-1:-1:-1;;;;;37450:117:0;;:::i;92350:35::-;;;:::i;184081:229::-;;;:::i;182669:225::-;;;;;;;;;;;;;;;;-1:-1:-1;182669:225:0;;-1:-1:-1;;;;;182669:225:0;;;;;;;;:::i;172739:36::-;;;:::i;181871:235::-;;;;;;;;;;;;;;;;-1:-1:-1;181871:235:0;;:::i;172323:44::-;;;:::i;189390:257::-;;;;;;;;;;;;;;;;-1:-1:-1;189390:257:0;;:::i;184316:231::-;;;:::i;188873:148::-;;;;;;;;;;;;;;;;-1:-1:-1;188873:148:0;-1:-1:-1;;;;;188873:148:0;;:::i;182900:216::-;;;;;;;;;;;;;;;;-1:-1:-1;182900:216:0;;-1:-1:-1;;;;;182900:216:0;;;;;;;;:::i;36445:85::-;;;:::i;172268:49::-;;;:::i;92432:39::-;;;:::i;92391:34::-;;;:::i;183122:177::-;;;;;;;;;;;;;;;;-1:-1:-1;183122:177:0;;;;:::i;40334:266::-;;;;;;;;;;;;;;;;-1:-1:-1;40334:266:0;;-1:-1:-1;;;;;40334:266:0;;;;;;:::i;37770:172::-;;;;;;;;;;;;;;;;-1:-1:-1;37770:172:0;;-1:-1:-1;;;;;37770:172:0;;;;;;:::i;172697:36::-;;;:::i;57464:133::-;;;;;;;;;;;;;;;;-1:-1:-1;57464:133:0;-1:-1:-1;;;;;57464:133:0;;:::i;173411:85::-;;;;;;;;;;;;;;;;-1:-1:-1;173411:85:0;-1:-1:-1;;;;;173411:85:0;;:::i;172645:45::-;;;:::i;183435:640::-;;;;;;;;;;;;;;;;-1:-1:-1;183435:640:0;;:::i;189917:378::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;189917:378:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;173144:89;;;;;;;;;;;;;;;;-1:-1:-1;173144:89:0;-1:-1:-1;;;;;173144:89:0;;:::i;182112:275::-;;;;;;;;;;;;;;;;-1:-1:-1;182112:275:0;;:::i;173325:80::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;173325:80:0;;;;;;;;;;:::i;60343:206::-;;;:::i;172983:75::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;172983:75:0;;;;;;;;;;:::i;173239:80::-;;;;;;;;;;;;;;;;-1:-1:-1;173239:80:0;-1:-1:-1;;;;;173239:80:0;;:::i;38000:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38000:149:0;;;;;;;;;;:::i;172781:36::-;;;:::i;172595:44::-;;;:::i;92477:37::-;;;:::i;48121:129::-;-1:-1:-1;;;;;48221:22:0;;48195:7;48221:22;;;:14;:22;;;;;;48121:129;;;;:::o;172373:45::-;;;:::o;36251:81::-;36320:5;36313:12;;;;;;;;;;;;;-1:-1:-1;;36313:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;36288:13;;36313:12;;36320:5;;36313:12;;;36320:5;36313:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36251:81;:::o;38287:166::-;38370:4;38386:39;38395:12;:10;:12::i;:::-;38409:7;38418:6;38386:8;:39::i;:::-;-1:-1:-1;38442:4:0;38287:166;;;;;:::o;172424:46::-;;;:::o;189653:258::-;189722:7;189731;189740:4;189746:7;189755;189781;:35;189817:22;189826:12;189817:8;:22::i;:::-;189781:123;;;-1:-1:-1;;;;;;189781:123:0;;;;;;;-1:-1:-1;;;;;189781:123:0;;;;;;;189841:10;189781:123;;;;;;189861:14;189781:123;;;;;;189878:12;189781:123;;;;;;189892:11;189781:123;;;;;;;;;;;;;-1:-1:-1;;189781:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;189781:123:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;189781:123:0;-1:-1:-1;189781:123:0;;-1:-1:-1;189781:123:0;-1:-1:-1;189653:258:0;-1:-1:-1;189653:258:0:o;172110:45::-;172154:1;172110:45;:::o;37294:98::-;37373:12;;37294:98;:::o;172824:33::-;;;;;;:::o;176408:351::-;176500:38;:36;:38::i;:::-;176548:30;176562:15;176548:13;:30::i;:::-;176603:12;;:21;;176620:3;176603:21;:16;:21;:::i;:::-;176588:12;:36;176634:82;;;-1:-1:-1;;;176634:82:0;;176651:11;176634:82;;;;-1:-1:-1;;;;;176664:12:0;176634:82;;;;;;176678:15;176634:82;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;;-1:-1:-1;;176634:82:0;;;;;-1:-1:-1;;176634:82:0;;;;;;;:7;:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;176726:26;:24;:26::i;:::-;176408:351;;;:::o;172162:47::-;;;:::o;176969:2732::-;177044:27;;:::i;:::-;177083:24;:22;:24::i;:::-;177117:29;:27;:29::i;:::-;-1:-1:-1;;;;;177180:17:0;;;;;;;:11;:17;;;;;;;;:28;;;;;;;;;;;;177168:49;;-1:-1:-1;;;177168:49:0;;;;177180:28;;;-1:-1:-1;;177168:49:0;;;;;-1:-1:-1;;177168:49:0;;;;;;;;;;;177180:28;177168:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;177393:10:0;;177335:69;;-1:-1:-1;;;177335:69:0;;177168:49;;-1:-1:-1;177229:27:0;;;;;;;;177335:7;;-1:-1:-1;;177168:49:0;;177380:11;;177393:10;177335:69;;;177168:49;-1:-1:-1;;177335:69:0;177168:49;177229:27;177335:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;177335:69:0;;;;;;;;;;;;;;;177640:12;;177335:69;;-1:-1:-1;177335:69:0;;-1:-1:-1;177335:69:0;;-1:-1:-1;177335:69:0;;-1:-1:-1;177622:30:0;;177618:561;;177683:12;;;:29;;;177668:44;;177618:561;;;177795:12;;177760:48;;:13;;177778:29;;177760:48;:17;:48;:::i;:::-;177900:12;;;178058:1;178041:18;;;177900:12;-1:-1:-1;177743:65:0;-1:-1:-1;177618:561:0;178307:11;;:30;;178323:13;178307:30;:15;:30;:::i;:::-;178293:11;:44;178348:58;178372:12;178386:19;178348:23;:58::i;:::-;178483:57;178507:11;178521:18;178483:23;:57::i;:::-;179055:75;179079:15;179096:33;:14;179115:13;179096:33;:18;:33;:::i;:::-;179055:23;:75::i;:::-;179195:12;;;;:16;179191:56;;179213:34;179228:4;179234:9;179244:1;179234:12;;;;179213:14;:34::i;:::-;179325:11;-1:-1:-1;;;;;179312:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;179417:21;:19;:21::i;:::-;179449:26;:24;:26::i;:::-;179543:37;;;-1:-1:-1;;;179543:37:0;;-1:-1:-1;;;;;179505:11:0;179490:91;;179543:37;;;;;;;;179526:14;179490:91;;;;;;;;;179543:24;;:37;;;;;;;;;;;;;;179490:91;179543:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;179543:37:0;179490:91;;;;;;;;;;;179543:37;179490:91;;;179640:12;;;;;179597:97;;;;;;179640:12;179597:97;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;179597:97:0;;;;;;;;;-1:-1:-1;179597:97:0;;;176969:2732;;;;;;;;:::o;38920:317::-;39026:4;39042:36;39052:6;39060:9;39071:6;39042:9;:36::i;:::-;39088:121;39097:6;39105:12;:10;:12::i;:::-;39119:89;39157:6;39119:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39119:19:0;;;;;;-1:-1:-1;39119:19:0;;;;;;39139:12;:10;:12::i;:::-;-1:-1:-1;;;;;39119:33:0;;;;;;;;;;;;-1:-1:-1;39119:33:0;;;;:37;:89::i;:::-;39088:8;:121::i;:::-;-1:-1:-1;39226:4:0;38920:317;;;;;;:::o;186909:413::-;186978:24;:22;:24::i;:::-;187012:25;187040:18;:16;:18::i;:::-;187012:46;-1:-1:-1;187073:31:0;187069:44;;187106:7;;;187069:44;187123:60;187153:10;187165:17;187123:29;:60::i;:::-;187193:26;:24;:26::i;:::-;187244:11;;:34;;187260:17;187244:34;:15;:34;:::i;:::-;187230:11;:48;187289:26;:24;:26::i;:::-;;186909:413;;:::o;172902:75::-;;;;;;;;;;;;;:::o;187328:723::-;187470:10;187425:20;187453:28;;;:16;:28;;;;;;;;-1:-1:-1;;;;;187453:39:0;;;;;;;;;;;187530:24;187453:39;187547:6;187530:16;:24::i;:::-;187614:10;187564:25;187592:33;;;:21;:33;;;;;;187502:52;;-1:-1:-1;187564:25:0;187592:45;;187630:6;187592:45;:37;:45;:::i;:::-;187564:73;;187648:7;:38;187687:9;187698:6;187706:17;187725:21;187735:10;187725:9;:21::i;:::-;187648:99;;;-1:-1:-1;;;;;;187648:99:0;;;;;;;-1:-1:-1;;;;;187648:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;187648:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;187775:10:0;187758:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;187758:39:0;;;;;;;;;;;:54;;;187822:33;;;:21;:33;;;;;;:59;;;187896:74;;;;;;;;;;;;;187758:39;;-1:-1:-1;187775:10:0;;-1:-1:-1;187896:74:0;;;;;;;;;187985:59;;;;;;;;188014:10;;187985:59;;;;;;;;;;187328:723;;;;;:::o;188057:710::-;-1:-1:-1;;;;;188179:22:0;;188156:20;188179:22;;;:16;:22;;;;;;;;188202:10;188179:34;;;;;;;;;188246:24;188179:34;188263:6;188246:16;:24::i;:::-;188281:51;;;-1:-1:-1;;;188281:51:0;;-1:-1:-1;;;;;188281:51:0;;;;;;;;;;;;;;;;;;;;;188223:47;;-1:-1:-1;188281:7:0;;-1:-1:-1;;188281:51:0;;;;;-1:-1:-1;;188281:51:0;;;;;;;;:7;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;188343:22:0;;;;;;:16;:22;;;;;;;;188366:10;188343:34;;;;;;;:49;;;188439:27;;;:21;:27;;;;;;:39;;188471:6;188439:31;:39::i;:::-;-1:-1:-1;;;;;188488:27:0;;;;;;;:21;:27;;;;;;;;;:54;;;188557:45;;;;;;;188488:54;;-1:-1:-1;188557:45:0;;;;188488:27;;188573:10;;188557:45;;;;;;;;;;188617:69;;;;;;;;;;;;;;188647:10;;-1:-1:-1;;;;;188617:69:0;;;;;;;;;;;;;;188701:59;;;;;;;;188730:10;;188701:59;;;;;;;;;;188057:710;;;;;;:::o;185115:831::-;185174:24;:22;:24::i;:::-;185208:11;185222;185229:3;185222:6;:11::i;:::-;185208:25;;185244:24;185270;185298:22;185307:12;185298:8;:22::i;:::-;-1:-1:-1;;;;;185298:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;185298:44:0;;;;;;;;;-1:-1:-1;185298:44:0;-1:-1:-1;185353:29:0;185366:10;185378:3;185353:12;:29::i;:::-;185437:10;185420:28;;;;:16;:28;;;;;;:47;;185401:15;:67;185400:89;-1:-1:-1;185400:89:0;185392:124;;;;;-1:-1:-1;;;185392:124:0;;;;;;;;;;;;-1:-1:-1;;;185392:124:0;;;;;;;;;;;;;;;185527:22;185533:10;185545:3;185527:5;:22::i;:::-;185604:15;:13;:15::i;:::-;185832:70;185862:10;185874:27;185882:18;:16;:18::i;:::-;185874:3;;:27;:7;:27;:::i;:::-;185832:29;:70::i;:::-;185913:26;:24;:26::i;:::-;185115:831;;;;:::o;37153:81::-;37218:9;;;;37153:81;:::o;39632:215::-;39720:4;39736:83;39745:12;:10;:12::i;:::-;39759:7;39768:50;39807:10;39768:11;:25;39780:12;:10;:12::i;:::-;-1:-1:-1;;;;;39768:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;39768:25:0;;;:34;;;;;;;;;;;:38;:50::i;172216:46::-;;;:::o;176765:198::-;176850:38;:36;:38::i;:::-;-1:-1:-1;;;;;176910:17:0;;;;;;;:11;:17;;;;;;;;:28;;;;;;;;;;;;176898:58;;-1:-1:-1;;;176898:58:0;;;;176910:28;;;-1:-1:-1;;176898:58:0;;;;;176910:17;;176898:58;;;;;;176910:17;:28;176898:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;176765:198;;:::o;57603:306::-;-1:-1:-1;;;;;57825:24:0;;57679:7;57825:24;;;:16;:24;;;;;;-1:-1:-1;;;;57717:166:0;;:133;;:86;:54;57753:17;57825:24;57753:9;:17::i;:::-;57717:14;;;:54;:35;:54;:::i;:::-;:84;:86::i;:::-;:107;:133;:107;:133;:::i;:::-;:164;:166::i;:::-;:185;;;;;;;57603:306;-1:-1:-1;;57603:306:0:o;182393:270::-;182467:38;:36;:38::i;:::-;182557:6;182523:30;:13;182541:11;182523:30;:17;:30;:::i;:::-;:40;;182515:62;;;;;-1:-1:-1;;;182515:62:0;;;;;;;;;;;;-1:-1:-1;;;182515:62:0;;;;;;;;;;;;;;;182587:10;:26;;;182628:28;;;;;;;;;;;;;;;;;182393:270;:::o;47952:163::-;-1:-1:-1;;;;;48085:22:0;;48027:7;48085:22;;;:14;:22;;;;;;48053:55;;:27;48085:22;48053:19;:27::i;:::-;:31;:55;:31;:55;:::i;51297:205::-;51362:15;51380:26;:24;:26::i;:::-;51362:44;;51433:1;51421:8;:13;51417:26;;51436:7;;;51417:26;51453:42;51470:24;:8;:22;:24::i;:::-;51453:16;:42::i;:::-;51297:205;:::o;176068:334::-;176116:38;:36;:38::i;:::-;176164:32;176178:17;176164:13;:32::i;:::-;176210:20;176236:29;:27;:29::i;:::-;176206:59;;;;;;176283:15;176275:41;;;;;-1:-1:-1;;;176275:41:0;;;;;;;;;;;;-1:-1:-1;;;176275:41:0;;;;;;;;;;;;;;;176326:9;:27;;-1:-1:-1;;176326:27:0;;;;;;;;;176368;;;;176385:9;;;;;;;176368:27;176385:9;176368:27;;;;;;;;;;;;;;;;;;;;;;;;176068:334;:::o;48256:305::-;-1:-1:-1;;;;;48477:24:0;;48331:7;48477:24;;;:16;:24;;;;;;-1:-1:-1;;;;48369:166:0;;:133;;:86;:54;48405:17;48477:24;48405:9;:17::i;:::-;48369:14;;;:54;:35;:54;:::i;190301:117::-;190360:4;190396:15;190383:9;;;;;;;:28;;;;;;;;;190376:35;;190301:117;:::o;181412:317::-;181462:38;:36;:38::i;:::-;181510:30;181524:15;181510:13;:30::i;:::-;181550:7;:28;181579:22;181588:12;181579:8;:22::i;:::-;181603:12;;181550:91;;;;;;;-1:-1:-1;;;;;;181550:91:0;;;-1:-1:-1;;;;;181550:91:0;;;;;;;;;;;;;;181625:14;181550:91;;;;;;;;;;;;;;-1:-1:-1;;181550:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;181651:9:0;:29;;-1:-1:-1;;181651:29:0;;;;;;;181695:27;;;;-1:-1:-1;181651:29:0;181712:9;;;;;;-1:-1:-1;181695:27:0;181712:9;181663:17;181695:27;;;;;;;;;;;;;;;;;;;;;;;181412:317::o;173064:74::-;;;;;;;;;;;;;;;:::o;172864:31::-;;;;;;;;;:::o;57291:167::-;-1:-1:-1;;;;;57426:24:0;;57367:7;57426:24;;;:16;:24;;;;;;57393:58;;:28;57426:24;57393:20;:28::i;189123:261::-;189315:62;;;-1:-1:-1;;;189315:62:0;;-1:-1:-1;;;;;189315:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;189315:7:0;;:14;;:62;;;;;;;;;;;;;;;:7;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;189315:62:0;;189123:261;-1:-1:-1;;;;;189123:261:0:o;37450:117::-;-1:-1:-1;;;;;37542:18:0;37516:7;37542:18;;;;;;;;;;;;37450:117::o;92350:35::-;;;;:::o;184081:229::-;184178:1;184145:21;184155:10;184145:9;:21::i;:::-;:35;;184137:58;;;;;-1:-1:-1;;;184137:58:0;;;;;;;;;;;;-1:-1:-1;;;184137:58:0;;;;;;;;;;;;;;;184222:10;184205:28;;;;:16;:28;;;;;;;;;184236:15;184205:46;;;;184266:37;;;;;;;;;;;;;;;;;184081:229::o;182669:225::-;182749:38;:36;:38::i;:::-;-1:-1:-1;;;;;182797:34:0;;;;;;:25;:34;;;;;;;;;:43;;-1:-1:-1;;182797:43:0;;;;;;;;;;182855:32;;;;;;;;;;;;;;;;;182669:225;;:::o;172739:36::-;;;;:::o;181871:235::-;181949:24;:22;:24::i;:::-;181983:29;:27;:29::i;:::-;182022:12;:30;;;182067:32;;;;;;;;;;;;;;;;;181871:235;:::o;172323:44::-;;;:::o;189390:257::-;189490:12;;189466:4;;189490:12;;;:53;;-1:-1:-1;189532:10:0;189506:37;;;;:25;:37;;;;;;;;189490:53;189489:151;;;;;189628:12;;189563:61;189613:10;189563:45;189595:12;;189563:27;:25;:27::i;:::-;:31;:45;:31;:45;:::i;:61::-;:77;;;189390:257;-1:-1:-1;;189390:257:0:o;184316:231::-;184395:10;184418:1;184378:28;;;:16;:28;;;;;;184370:72;;;;;-1:-1:-1;;;184370:72:0;;;;;;;;;;;;-1:-1:-1;;;184370:72:0;;;;;;;;;;;;;;;184469:10;184491:1;184452:28;;;:16;:28;;;;;;;;:41;;;184508:32;;;;;;;;;;;;;;;;184316:231::o;188873:148::-;188938:7;:20;188959:5;188974:14;188991:22;189000:12;188991:8;:22::i;:::-;188938:76;;;-1:-1:-1;188938:76:0;;;-1:-1:-1;;;;;;188938:76:0;;;-1:-1:-1;;;;;188938:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;188938:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;188873:148;:::o;182900:216::-;182983:38;:36;:38::i;:::-;-1:-1:-1;;;;;183031:21:0;;;;;;:10;:21;;;;;;;;;:31;;-1:-1:-1;;183031:31:0;;;;;;;;;;183077:32;;;;;;;;;;;;;;;;;182900:216;;:::o;36445:85::-;36516:7;36509:14;;;;;;;;;;;;;-1:-1:-1;;36509:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;36484:13;;36509:14;;36516:7;;36509:14;;;36516:7;36509:14;;;;;;;;;;;;;;;;;;;;;;;;172268:49;;;:::o;92432:39::-;;;;:::o;92391:34::-;;;;:::o;183122:177::-;183186:38;:36;:38::i;:::-;183234:12;:19;;-1:-1:-1;;183234:19:0;;;;;;;;;;183268:24;;;;;;;;;;;;;;;;;183122:177;:::o;40334:266::-;40427:4;40443:129;40452:12;:10;:12::i;:::-;40466:7;40475:96;40514:15;40475:96;;;;;;;;;;;;;;;;;:11;:25;40487:12;:10;:12::i;:::-;-1:-1:-1;;;;;40475:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;40475:25:0;;;:34;;;;;;;;;;;;:38;:96::i;37770:172::-;37856:4;37872:42;37882:12;:10;:12::i;:::-;37896:9;37907:6;37872:9;:42::i;172697:36::-;;;;:::o;57464:133::-;-1:-1:-1;;;;;57566:24:0;57540:7;57566:24;;;:16;:24;;;;;;;57464:133::o;173411:85::-;;;;;;;;;;;;;:::o;172645:45::-;;;:::o;183435:640::-;183493:24;:22;:24::i;:::-;183527:30;183541:15;183527:13;:30::i;:::-;183575:21;183592:3;183575:16;:21::i;:::-;183567:51;;;;;-1:-1:-1;;;183567:51:0;;;;;;;;;;;;-1:-1:-1;;;183567:51:0;;;;;;;;;;;;;;;183646:10;183668:1;183629:28;;;:16;:28;;;;;:41;;;183777:11;183784:3;183777:6;:11::i;:::-;183763:25;;183798:78;183824:11;183837:21;183847:10;183837:9;:21::i;:::-;183860:3;183865:10;183798:25;:78::i;:::-;183887:65;:14;-1:-1:-1;;;;;183887:31:0;183919:10;183931:15;183948:3;183887:31;:65::i;:::-;183962:22;183968:10;183980:3;183962:5;:22::i;:::-;183995:26;:24;:26::i;:::-;184036:32;;;184065:1;184036:32;;;;184045:10;;184036:32;;;;;;;;;;183435:640;;:::o;189917:378::-;190180:108;;;-1:-1:-1;;;190180:108:0;;-1:-1:-1;;;;;190180:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;190180:7:0;;-1:-1:-1;;190180:108:0;;;;;;;;;;;;;:7;:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;190180:108:0;;;;;;;;;;;-1:-1:-1;189917:378:0;-1:-1:-1;;;;;;189917:378:0:o;173144:89::-;;;;;;;;;;;;;;;:::o;182112:275::-;182190:38;:36;:38::i;:::-;182265:12;;182246:15;:31;;182238:55;;;;;-1:-1:-1;;;182238:55:0;;;;;;;;;;;;-1:-1:-1;;;182238:55:0;;;;;;;;;;;;;;;182303:12;:30;;;182348:32;;;;;;;;;;;;;;;;;182112:275;:::o;173325:80::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;60343:206::-;60409:16;60428:22;:20;:22::i;:::-;60409:41;;60478:1;60465:9;:14;60461:27;;60481:7;;;60461:27;60498:44;60516:25;:9;:23;:25::i;:::-;60498:17;:44::i;172983:75::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;172983:75:0;;:::o;173239:80::-;;;;;;;;;;;;;:::o;38000:149::-;-1:-1:-1;;;;;38115:18:0;;;38089:7;38115:18;;;-1:-1:-1;38115:18:0;;;;;;;;:27;;;;;;;;;;;;;38000:149::o;172781:36::-;;;;:::o;172595:44::-;;;;:::o;92477:37::-;;;;:::o;33684:104::-;33771:10;33684:104;:::o;43398:340::-;-1:-1:-1;;;;;43499:19:0;;43491:68;;;;-1:-1:-1;;;43491:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43577:21:0;;43569:68;;;;-1:-1:-1;;;43569:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43648:18:0;;;;;;;-1:-1:-1;43648:18:0;;;;;;;;:27;;;;;;;;;;;;;:36;;;43699:32;;;;;;;;;;;;;;;;;43398:340;;;:::o;191530:151::-;191592:13;191651:11;-1:-1:-1;;;;;191638:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;191638:35:0;;191530:151;-1:-1:-1;;191530:151:0:o;192947:131::-;193019:18;:16;:18::i;:::-;193047:24;:22;:24::i;191160:111::-;191242:6;191229:19;;;;;;;;:9;;;;;;;:19;;;;;;;;;191221:43;;;;;-1:-1:-1;;;191221:43:0;;;;;;;;;;;;-1:-1:-1;;;191221:43:0;;;;;;;;;;;;;;26016:176;26074:7;26105:5;;;26128:6;;;;26120:46;;;;;-1:-1:-1;;;26120:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;191818:152;-1:-1:-1;;;;;191918:14:0;191878:85;;;191893:15;191878:85;;191935:27;:25;:27::i;:::-;191878:85;;;;;;;;;;;;;;;191818:152::o;192686:132::-;192753:22;192762:12;192753:8;:22::i;:::-;-1:-1:-1;;;;;192753:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;192753:39:0;192752:40;192744:67;;;;;-1:-1:-1;;;192744:67:0;;;;;;;;;;;;-1:-1:-1;;;192744:67:0;;;;;;;;;;;;;;192447:153;192532:12;-1:-1:-1;;;;;192518:26:0;:10;:26;;:52;;-1:-1:-1;192559:10:0;192548:22;;;;:10;:22;;;;;;;;192518:52;192510:83;;;;;-1:-1:-1;;;192510:83:0;;;;;;;;;;;;-1:-1:-1;;;192510:83:0;;;;;;;;;;;;;;192225:124;192304:38;:14;-1:-1:-1;;;;;192304:27:0;192332:2;192336:5;192304:27;:38::i;180028:1378::-;180199:79;;;-1:-1:-1;;;180199:79:0;;-1:-1:-1;;;;;180221:14:0;180199:79;;;;;;180237:11;180199:79;;;;;;180250:10;180199:79;;;;;;;;;;;;;-1:-1:-1;;;;;;180199:7:0;;:21;;:79;;;;;;;;;;;;;;;:7;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;180199:79:0;;;;;;;;;;;;;-1:-1:-1;180199:79:0;;-1:-1:-1;180199:79:0;-1:-1:-1;180412:49:0;;;180408:194;;;180490:10;;:65;;180505:49;;;180490:65;:14;:65;:::i;:::-;180477:10;:78;180569:22;:20;:22::i;:::-;180678:77;:14;-1:-1:-1;;;;;180678:27:0;180706:15;180723:31;180678:27;:77::i;:::-;180781:12;;:33;;180798:15;180781:33;:16;:33;:::i;:::-;180766:12;:48;180893:506;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;180893:506:0;;;;;;;;;;;;;180028:1378;;;;;:::o;186163:740::-;186249:24;:22;:24::i;:::-;186285;186311;186339:22;186348:12;186339:8;:22::i;:::-;-1:-1:-1;;;;;186339:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;186339:44:0;;;;;;;;;-1:-1:-1;186339:44:0;-1:-1:-1;186394:23:0;186407:4;186413:3;186394:12;:23::i;:::-;-1:-1:-1;;;;;186454:20:0;;;;;;:16;:20;;;;;;:39;;:58;;186435:15;:78;186427:107;;;;;-1:-1:-1;;;186427:107:0;;;;;;;;;;;;-1:-1:-1;;;186427:107:0;;;;;;;;;;;;;;;186639:1;186601:26;186622:4;186601:20;:26::i;:::-;:40;186593:105;;;;;-1:-1:-1;;;186593:105:0;;;;;;;;;;;;-1:-1:-1;;;186593:105:0;;;;;;;;;;;;;;;186794:62;186820:11;186833:13;186843:2;186833:9;:13::i;:::-;186848:3;186853:2;186794:25;:62::i;:::-;186866:30;186882:4;186888:2;186892:3;186866:15;:30::i;26888:187::-;26974:7;27009:12;27001:6;;;;26993:29;;;;-1:-1:-1;;;26993:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27044:5:0;;;26888:187::o;47567:379::-;47613:28;47682:31;47702:10;47682:19;:31::i;:::-;47767:10;47723:23;47752:26;;;:14;:26;;;;;;47653:60;;-1:-1:-1;47723:23:0;47752:52;;47653:60;47752:52;:30;:52;:::i;:::-;47829:10;47814:26;;;;:14;:26;;;;;;;;;:44;;;47874:65;;;;;;;;;;;;;47723:81;;-1:-1:-1;47829:10:0;;47874:65;;;;;;;;;;47567:379;;:::o;193084:145::-;193169:53;;;-1:-1:-1;;;193169:53:0;;-1:-1:-1;;;;;193169:53:0;;;;;;;;;;;;;;;193186:15;193169:42;;;;;;:53;;;;;-1:-1:-1;;193169:53:0;;;;;;;;-1:-1:-1;193169:42:0;:53;;;;;;;;;;26463:134;26521:7;26547:43;26551:1;26554;26547:43;;;;;;;;;;;;;;;;;:3;:43::i;93595:253::-;93709:15;;;93753:11;;93735:29;;;;93658:6;;93782:59;;93709:15;93782:59;:27;:59;:::i;:::-;93775:66;;;93595:253;:::o;190618:131::-;190670:7;190696:46;190719:22;190713:2;:28;190696:12;:3;172095:8;190696:12;:7;:12;:::i;:::-;:16;:46;:16;:46;:::i;184730:379::-;184839:12;;-1:-1:-1;;;;;184814:20:0;;;;;;:11;:20;;;;;;184856:15;;184814:38;;:20;:24;:38::i;:::-;:57;;184806:88;;;;;-1:-1:-1;;;184806:88:0;;;;;;;;;;;;-1:-1:-1;;;184806:88:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;184991:30:0;;;;;;:21;:30;;;;;;184960:27;184983:3;184960:18;184991:30;184960:9;:18::i;:27::-;:61;;184952:91;;;;;-1:-1:-1;;;184952:91:0;;;;;;;;;;;;-1:-1:-1;;;184952:91:0;;;;;;;;;;;;;;59964:373;60047:27;60059:7;60068:5;60047:11;:27::i;:::-;60085:24;60112:95;60155:42;60156:25;60175:5;60156:14;;:18;;:25;;;;:::i;60155:42::-;-1:-1:-1;;;;;60112:25:0;;;;;;:16;:25;;;;;;;:29;:95::i;:::-;-1:-1:-1;;;;;60218:25:0;;;;;;:16;:25;;;;;;;;;:45;;;60279:51;;;;;;;60218:45;;-1:-1:-1;60218:25:0;;60279:51;;;;;;;;;;;59964:373;;;:::o;92679:200::-;92734:14;92769:24;:22;:24::i;:::-;92817:10;;92760:33;;-1:-1:-1;92817:22:0;;92760:33;92817:22;:14;:22;:::i;:::-;92804:10;:35;92850:22;:20;:22::i;:::-;;92679:200;:::o;27322:459::-;27380:7;27621:6;27617:45;;-1:-1:-1;27650:1:0;27643:8;;27617:45;27684:5;;;27688:1;27684;:5;:1;27707:5;;;;;:10;27699:56;;;;-1:-1:-1;;;27699:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24962:132;25049:1;25018:8;25069:6;;;25061:26;;;;;-1:-1:-1;;;25061:26:0;;;;;;;;;;;;-1:-1:-1;;;25061:26:0;;;;;;;;;;;;;;32839:210;32895:6;32924:5;;;32948:6;;;;;;:16;;;32963:1;32958;:6;;32948:16;32947:38;;;;32974:1;32970;:5;:14;;;;;32983:1;32979;:5;32970:14;32939:84;;;;-1:-1:-1;;;32939:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24711:135;24767:7;24799:1;24794;:6;;24786:26;;;;;-1:-1:-1;;;24786:26:0;;;;;;;;;;;;-1:-1:-1;;;24786:26:0;;;;;;;;;;;;;;46966:338;47050:1;47034:13;:11;:13::i;:::-;:17;47026:45;;;;;-1:-1:-1;;;47026:45:0;;;;;;;;;;;;-1:-1:-1;;;47026:45:0;;;;;;;;;;;;;;;47086:10;47082:23;;47098:7;;47082:23;47132:63;47181:13;:11;:13::i;:::-;47151:27;:5;-1:-1:-1;;;47151:9:0;:27::i;:::-;:43;;;;;47132:14;;;47151:43;;47132:63;:18;:63;:::i;:::-;47115:14;:80;47210:35;;;;;;;;47227:10;;47210:35;;;;;;;;;;47282:14;;47260:37;;;;;;;;;;;;;;;;46966:338;:::o;190887:134::-;190973:41;;;-1:-1:-1;;;190973:41:0;;-1:-1:-1;;;;;190998:15:0;190973:41;;;;;;;;-1:-1:-1;;190973:14:0;:24;;;;:41;;;;;;;;;;;;;;:24;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;190973:41:0;;-1:-1:-1;190887:134:0;:::o;157618:581::-;-1:-1:-1;;;;;157779:20:0;;157760:16;157779:20;;;;;;;;;;;;157973:13;;;157972:128;;158092:8;157972:128;;;158006:71;158019:57;158062:13;;;158019:38;158072:3;158019:29;:15;158039:8;158019:29;:19;:29;:::i;:::-;:33;:38;:33;:38;:::i;:57::-;158006:8;;:71;:12;:71;:::i;:::-;-1:-1:-1;;;;;158111:20:0;;;;;;;;;;;;;;;:30;;;158156:36;;;;;;;158111:30;;-1:-1:-1;158111:20:0;;158156:36;;;;;;;;;;;157618:581;;;;;;:::o;144362:203::-;144489:68;;;-1:-1:-1;;;;;144489:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;144489:68:0;-1:-1:-1;;;144489:68:0;;;144462:96;;144482:5;;144462:19;:96::i;59273:373::-;59356:27;59368:7;59377:5;59356:11;:27::i;:::-;59394:24;59421:95;59464:42;59465:25;59484:5;59465:14;;:18;;:25;;;;:::i;59464:42::-;-1:-1:-1;;;;;59421:25:0;;;;;;:16;:25;;;;;;;:29;:95::i;93112:244::-;93223:13;;;93263:10;;93247:26;;;;93171:6;;93291:58;;93223:13;93291:58;:25;:58;:::i;56223:402::-;56308:1;56292:13;:11;:13::i;:::-;:17;56284:45;;;;;-1:-1:-1;;;56284:45:0;;;;;;;;;;;;-1:-1:-1;;;56284:45:0;;;;;;;;;;;;;;;56344:10;56340:23;;56356:7;;56340:23;56373;56399:63;56448:13;:11;:13::i;:::-;56418:27;:5;-1:-1:-1;;;56418:9:0;:27::i;:::-;:43;;;;;56399:14;;;56418:43;;56399:63;:18;:63;:::i;:::-;56472:14;:41;;;56529:36;;;;;;;;56373:89;;-1:-1:-1;56547:10:0;;56529:36;;;;;;;;;56580:38;;;;;;;;;;;;;;;;;56223:402;;:::o;191353:107::-;191427:12;-1:-1:-1;;;;;191413:26:0;:10;:26;191405:48;;;;;-1:-1:-1;;;191405:48:0;;;;;;;;;;;;-1:-1:-1;;;191405:48:0;;;;;;;;;;;;;;144181:175;144290:58;;;-1:-1:-1;;;;;144290:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;144290:58:0;-1:-1:-1;;;144290:58:0;;;144263:86;;144283:5;;144263:19;:86::i;58306:663::-;58432:32;58448:4;58454:2;58458:5;58432:15;:32::i;:::-;58475:24;58505:40;:25;58524:5;58505:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;58585:22:0;;58555:27;58585:22;;;:16;:22;;;;;;58475:70;;-1:-1:-1;58555:27:0;58585:45;;58475:70;58585:26;:45::i;:::-;-1:-1:-1;;;;;58640:22:0;;;;;;;:16;:22;;;;;;:50;;;58730:20;;;;;;;;;58640:50;;-1:-1:-1;58640:22:0;58730:43;;58755:17;58730:24;:43::i;:::-;-1:-1:-1;;;;;58783:20:0;;;;;;;:16;:20;;;;;;;;;:48;;;58847:51;;;;;;;58783:48;;-1:-1:-1;58847:51:0;;;;;;;;;;;;;;;58913:49;;;;;;;;-1:-1:-1;;;;;58913:49:0;;;;;;;;;;;;;58306:663;;;;;;:::o;32393:213::-;32449:6;32478:5;;;32502:6;;;;;;:16;;;32517:1;32512;:6;;32502:16;32501:38;;;;32528:1;32524;:5;:14;;;;;32537:1;32533;:5;32524:14;32493:87;;;;-1:-1:-1;;;32493:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28243:130;28301:7;28327:39;28331:1;28334;28327:39;;;;;;;;;;;;;;;;;:3;:39::i;50538:373::-;50621:27;50633:7;50642:5;50621:11;:27::i;:::-;50659:24;50686:95;50729:42;50730:25;50749:5;50730:14;;:18;;:25;;;;:::i;50729:42::-;-1:-1:-1;;;;;50686:25:0;;;;;;:16;:25;;;;;;;:29;:95::i;:::-;-1:-1:-1;;;;;50792:25:0;;;;;;:16;:25;;;;;;;;;:45;;;50853:51;;;;;;;50792:45;;-1:-1:-1;50792:25:0;;50853:51;;;;;;;;;;;50538:373;;;:::o;56892:393::-;56944:28;57007:32;57028:10;57007:20;:32::i;:::-;57098:10;57050:25;57081:28;;;:16;:28;;;;;;56984:55;;-1:-1:-1;57050:25:0;57081:54;;56984:55;57081:54;:32;:54;:::i;:::-;57162:10;57145:28;;;;:16;:28;;;;;;;;;:48;;;57209:69;;;;;;;;;;;;;57050:85;;-1:-1:-1;57162:10:0;;57209:69;;;;;;;;;;56892:393;;:::o;146444:751::-;146889:69;;;;;;;;;;;;;;;;;;146863:23;;146889:69;;-1:-1:-1;;;;;146889:27:0;;;146917:4;;146889:69;:27;:69;:::i;:::-;146972:17;;146863:95;;-1:-1:-1;146972:21:0;146968:221;;147112:10;147101:30;;;;;;;;;;;;;;;-1:-1:-1;147101:30:0;147093:85;;;;-1:-1:-1;;;147093:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49853:373;49936:27;49948:7;49957:5;49936:11;:27::i;:::-;49974:24;50001:95;50044:42;50045:25;50064:5;50045:14;;:18;;:25;;;;:::i;50044:42::-;-1:-1:-1;;;;;50001:25:0;;;;;;:16;:25;;;;;;;:29;:95::i;48952:657::-;49078:32;49094:4;49100:2;49104:5;49078:15;:32::i;:::-;49121:21;49151:40;:25;49170:5;49151:14;;:18;;:25;;;;:::i;:40::-;-1:-1:-1;;;;;49231:22:0;;49201:27;49231:22;;;:16;:22;;;;;;49121:70;;-1:-1:-1;49201:27:0;49231:42;;49121:70;49231:26;:42::i;:::-;-1:-1:-1;;;;;49283:22:0;;;;;;;:16;:22;;;;;;:50;;;49373:20;;;;;;;;;49283:50;;-1:-1:-1;49283:22:0;49373:40;;49398:14;49373:24;:40::i;:::-;-1:-1:-1;;;;;49423:20:0;;;;;;;:16;:20;;;;;;;;;:48;;;49487:51;;;;;;;49423:48;;-1:-1:-1;49487:51:0;;;;;;;;;;;;;;;49553:49;;;;;;;;-1:-1:-1;;;;;49553:49:0;;;;;;;;;;;;;48952:657;;;;;;:::o;28855:272::-;28941:7;28975:12;28968:5;28960:28;;;;-1:-1:-1;;;28960:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28960:28:0;;;;;;;;;;;;;;;;;;28998:9;29014:1;29010;:5;;;;;;;28855:272;-1:-1:-1;;;;;28855:272:0:o;42565:410::-;-1:-1:-1;;;;;42648:21:0;;42640:67;;;;-1:-1:-1;;;42640:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42718:49;42739:7;42756:1;42760:6;42718:20;:49::i;:::-;42799:68;42822:6;42799:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42799:18:0;;:9;:18;;;;;;;;;;;;;:22;:68::i;:::-;-1:-1:-1;;;;;42778:18:0;;:9;:18;;;;;;;;;;:89;42892:12;;:24;;42909:6;42892:16;:24::i;:::-;42877:12;:39;42931:37;;;;;;;;42957:1;;-1:-1:-1;;;;;42931:37:0;;;;;;;;;;;;42565:410;;:::o;140157:193::-;140260:12;140291:52;140313:6;140321:4;140327:1;140330:12;140291:21;:52::i;:::-;140284:59;140157:193;-1:-1:-1;;;;140157:193:0:o;41875:370::-;-1:-1:-1;;;;;41958:21:0;;41950:65;;;;;-1:-1:-1;;;41950:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42026:49;42055:1;42059:7;42068:6;42026:20;:49::i;:::-;42101:12;;:24;;42118:6;42101:24;:16;:24;:::i;:::-;42086:12;:39;-1:-1:-1;;;;;42156:18:0;;:9;:18;;;;;;;;;;;:30;;42179:6;42156:22;:30::i;:::-;-1:-1:-1;;;;;42135:18:0;;:9;:18;;;;;;;;;;;:51;;;;42201:37;;;;;;;42135:18;;:9;;42201:37;;;;;;;;;;41875:370;;:::o;41074:530::-;-1:-1:-1;;;;;41179:20:0;;41171:70;;;;-1:-1:-1;;;41171:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41259:23:0;;41251:71;;;;-1:-1:-1;;;41251:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41333:47;41354:6;41362:9;41373:6;41333:20;:47::i;:::-;41411:71;41433:6;41411:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41411:17:0;;:9;:17;;;;;;;;;;;;;:21;:71::i;:::-;-1:-1:-1;;;;;41391:17:0;;;:9;:17;;;;;;;;;;;:91;;;;41515:20;;;;;;;:32;;41540:6;41515:24;:32::i;:::-;-1:-1:-1;;;;;41492:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;41562:35;;;;;;;41492:20;;41562:35;;;;;;;;;;;;;41074:530;;;:::o;141184:523::-;141311:12;141368:5;141343:21;:30;;141335:81;;;;-1:-1:-1;;;141335:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;141434:18;141445:6;141434:10;:18::i;:::-;141426:60;;;;;-1:-1:-1;;;141426:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;141557:12;141571:23;141598:6;-1:-1:-1;;;;;141598:11:0;141618:5;141626:4;141598:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;141598:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;141556:75;;;;141648:52;141666:7;141675:10;141687:12;141648:17;:52::i;:::-;141641:59;141184:523;-1:-1:-1;;;;;;;141184:523:0:o;137302:413::-;137662:20;137700:8;;;137302:413::o;142687:725::-;142802:12;142830:7;142826:580;;;-1:-1:-1;142860:10:0;142853:17;;142826:580;142971:17;;:21;142967:429;;143229:10;143223:17;143289:15;143276:10;143272:2;143268:19;143261:44;143178:145;143361:20;;-1:-1:-1;;;143361:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;143361:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o"
            },
            "methodIdentifiers": {
              "BPTVal(address,address,address,address)": "681cb10a",
              "DL_FACTORY()": "174a5be4",
              "accumulativeFundsOf(address)": "4e97415f",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "allowedLiquidityProviders(address)": "c59e3959",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "cancelWithdraw()": "84b76824",
              "claim(address,address)": "21c0b342",
              "custodyAllowance(address,address)": "c965b548",
              "deactivate()": "51b42b00",
              "debtLockers(address,address)": "d7bd3c91",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "delegateFee()": "b69410de",
              "deposit(uint256)": "b6b55f25",
              "depositDate(address)": "24b92e8e",
              "finalize()": "4bb278f3",
              "fundLoan(address,address,uint256)": "1aa37cec",
              "getInitialStakeRequirements()": "13bf9e7e",
              "getPoolSharesRequired(address,address,address,address,uint256)": "c3746825",
              "increaseAllowance(address,uint256)": "39509351",
              "increaseCustodyAllowance(address,uint256)": "27f91856",
              "intendToWithdraw()": "73ef9a50",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "isDepositAllowed(uint256)": "80e7ce85",
              "isPoolFinalized()": "4f85221a",
              "liquidityAsset()": "209b2bca",
              "liquidityCap()": "76687d3d",
              "liquidityLocker()": "9759164a",
              "lockupPeriod()": "ee947a7c",
              "lossesBalance()": "fec984e3",
              "name()": "06fdde03",
              "openToPublic()": "1831ccf2",
              "poolAdmins(address)": "613384f2",
              "poolDelegate()": "4046af2b",
              "poolLosses()": "a33142f7",
              "poolState()": "641ad8a9",
              "principalOut()": "ac641655",
              "reclaimERC20(address)": "8905fd4f",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "setAllowList(address,bool)": "7666f125",
              "setLiquidityCap(uint256)": "7b99adb1",
              "setLockupPeriod(uint256)": "c771c390",
              "setOpenToPublic(bool)": "a43baa3d",
              "setPoolAdmin(address,bool)": "9185192a",
              "setStakingFee(uint256)": "410dbf7e",
              "stakeAsset()": "80cd916d",
              "stakeLocker()": "033b1cf0",
              "stakingFee()": "eff98843",
              "superFactory()": "0d49b38c",
              "symbol()": "95d89b41",
              "totalCustodyAllowance(address)": "af6d5571",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferByCustodian(address,address,uint256)": "2ac04ac8",
              "transferFrom(address,address,uint256)": "23b872dd",
              "triggerDefault(address,address)": "40504ba0",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdraw(uint256)": "2e1a7d4d",
              "withdrawCooldown(address)": "d82745c8",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "PoolFDT": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "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": "LossesCorrectionUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesDistributed",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesPerShareUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "LossesRecognized",
              "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"
                }
              ],
              "name": "accumulativeLossesOf",
              "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": "decimals",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "subtractedValue",
                  "type": "uint256"
                }
              ],
              "name": "decreaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "spender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "addedValue",
                  "type": "uint256"
                }
              ],
              "name": "increaseAllowance",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "interestSum",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "lossesBalance",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolLosses",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizableLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_owner",
                  "type": "address"
                }
              ],
              "name": "recognizedLossesOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "symbol",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "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": "updateLossesReceived",
              "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",
              "accumulativeLossesOf(address)": "40bde098",
              "allowance(address,address)": "dd62ed3e",
              "approve(address,uint256)": "095ea7b3",
              "balanceOf(address)": "70a08231",
              "decimals()": "313ce567",
              "decreaseAllowance(address,uint256)": "a457c2d7",
              "increaseAllowance(address,uint256)": "39509351",
              "interestBalance()": "9f3c7325",
              "interestSum()": "71073bac",
              "lossesBalance()": "fec984e3",
              "name()": "06fdde03",
              "poolLosses()": "a33142f7",
              "recognizableLossesOf(address)": "66967791",
              "recognizedLossesOf(address)": "aed4966a",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "transfer(address,uint256)": "a9059cbb",
              "transferFrom(address,address,uint256)": "23b872dd",
              "updateFundsReceived()": "46c162de",
              "updateLossesReceived()": "cc0fef02",
              "withdrawFunds()": "24600fc3",
              "withdrawableFundsOf(address)": "443bb293",
              "withdrawnFundsOf(address)": "0041c52c"
            }
          }
        },
        "PoolFactory": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_globals",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "pool",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "delegate",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "liquidityLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "liquidityCap",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                }
              ],
              "name": "PoolCreated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "PoolFactoryAdminSet",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "LL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "SL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "slFactory",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "llFactory",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidityCap",
                  "type": "uint256"
                }
              ],
              "name": "createPool",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "poolAddress",
                  "type": "address"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "globals",
              "outputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "isPool",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "poolFactoryAdmins",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "pools",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "poolsCreated",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newGlobals",
                  "type": "address"
                }
              ],
              "name": "setGlobals",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "poolFactoryAdmin",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "allowed",
                  "type": "bool"
                }
              ],
              "name": "setPoolFactoryAdmin",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {
                "contracts/core/pool/v1/PoolFactory.sol": {
                  "PoolLib": [
                    {
                      "length": 20,
                      "start": 4492
                    },
                    {
                      "length": 20,
                      "start": 9276
                    },
                    {
                      "length": 20,
                      "start": 9848
                    },
                    {
                      "length": 20,
                      "start": 10188
                    },
                    {
                      "length": 20,
                      "start": 11559
                    },
                    {
                      "length": 20,
                      "start": 11987
                    },
                    {
                      "length": 20,
                      "start": 13669
                    },
                    {
                      "length": 20,
                      "start": 14127
                    },
                    {
                      "length": 20,
                      "start": 14883
                    },
                    {
                      "length": 20,
                      "start": 16022
                    },
                    {
                      "length": 20,
                      "start": 17749
                    }
                  ]
                }
              },
              "object": "608060405234801561001057600080fd5b50604051615fe3380380615fe38339818101604052602081101561003357600080fd5b50516000805460ff19169055600280546001600160a01b039092166001600160a01b0319909216919091179055615f748061006f6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e25760003560e01c8063945164e71162000099578063c3124525116200006f578063c3124525146200023a578063c5ba73ed1462000244578063cc2e0a26146200024e578063f3f616c0146200027757620000e2565b8063945164e714620001de5780639f71f14a14620001fa578063ac4afa38146200021a57620000e2565b8063312b898214620000e75780633f4ba83a14620001585780635b16ebb714620001645780635c975abb14620001a15780636050abb214620001ab5780638456cb5914620001d4575b600080fd5b6200013c600480360360e0811015620000ff57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c00135620002a8565b604080516001600160a01b039092168252519081900360200190f35b6200016262000a23565b005b6200018d600480360360208110156200017c57600080fd5b50356001600160a01b031662000a39565b604080519115158252519081900360200190f35b6200018d62000a4e565b6200018d60048036036020811015620001c357600080fd5b50356001600160a01b031662000a57565b6200016262000a6c565b620001e862000a80565b60408051918252519081900360200190f35b6200020462000a86565b6040805160ff9092168252519081900360200190f35b6200013c600480360360208110156200023257600080fd5b503562000a8b565b6200013c62000aa6565b6200020462000ab5565b62000162600480360360208110156200026657600080fd5b50356001600160a01b031662000aba565b62000162600480360360408110156200028f57600080fd5b506001600160a01b038135169060200135151562000ae6565b6000805460ff1615620002f5576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b620002ff62000b50565b600254604080516313d459fb60e01b81523060048201526001600160a01b038881166024830152600360448301529151919092169182916313d459fb91606480820192602092909190829003018186803b1580156200035d57600080fd5b505afa15801562000372573d6000803e3d6000fd5b505050506040513d60208110156200038957600080fd5b5051620003ce576040805162461bcd60e51b815260206004820152600e60248201526d28231d24a72b20a624a22fa6262360911b604482015290519081900360640190fd5b604080516313d459fb60e01b8152306004828101919091526001600160a01b038a8116602484015260448301919091529151918316916313d459fb91606480820192602092909190829003018186803b1580156200042b57600080fd5b505afa15801562000440573d6000803e3d6000fd5b505050506040513d60208110156200045757600080fd5b50516200049c576040805162461bcd60e51b815260206004820152600e60248201526d28231d24a72b20a624a22fa9a62360911b604482015290519081900360640190fd5b60408051631b971aa360e11b815233600482015290516001600160a01b0383169163372e3546916024808301926020929190829003018186803b158015620004e357600080fd5b505afa158015620004f8573d6000803e3d6000fd5b505050506040513d60208110156200050f57600080fd5b505162000555576040805162461bcd60e51b815260206004820152600f60248201526e50463a4e4f545f44454c454741544560881b604482015290519081900360640190fd5b5060606040518060400160405280601081526020016f26b0b83632902837b7b6102a37b5b2b760811b815250905060606040518060400160405280600681526020016504d504c2d4c560d41b81525090506000338b8b8b8b8b8b8b8a8a604051620005c09062000eed565b6001600160a01b03808c1682528a81166020808401919091528a821660408401528982166060840152908816608083015260a0820187905260c0820186905260e0820185905261014061010083018181528551918401919091528451909161012084019161016085019187019080838360005b838110156200064d57818101518382015260200162000633565b50505050905090810190601f1680156200067b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620006b057818101518382015260200162000696565b50505050905090810190601f168015620006de5780820380516001836020036101000a031916815260200191505b509c50505050505050505050505050604051809103906000f0801580156200070a573d6000803e3d6000fd5b5090508093508360036000600154815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160046000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000815460010191905081905550336001600160a01b0316846001600160a01b03167fca6c57d58de1ff84c629ea4a44b3a2f19a6c83cc1dc3cd7d1ede2067a6a1016d8d8d856001600160a01b0316639759164a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200080957600080fd5b505afa1580156200081e573d6000803e3d6000fd5b505050506040513d60208110156200083557600080fd5b5051604080516233b1cf60e41b815290516001600160a01b0389169163033b1cf0916004808301926020929190829003018186803b1580156200087757600080fd5b505afa1580156200088c573d6000803e3d6000fd5b505050506040513d6020811015620008a357600080fd5b81019080805190602001909291905050508d8d8d8c8c604051808a6001600160a01b03166001600160a01b03168152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b031681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156200096e57818101518382015260200162000954565b50505050905090810190601f1680156200099c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620009d1578181015183820152602001620009b7565b50505050905090810190601f168015620009ff5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a3505050979650505050505050565b62000a2d62000c12565b62000a3762000cfd565b565b60046020526000908152604090205460ff1681565b60005460ff1690565b60056020526000908152604090205460ff1681565b62000a7662000c12565b62000a3762000d9e565b60015481565b600481565b6003602052600090815260409020546001600160a01b031681565b6002546001600160a01b031681565b600381565b62000ac462000e22565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b62000af062000e22565b6001600160a01b038216600081815260056020908152604091829020805460ff1916851515908117909155825190815291517fc0d8ae32722eafe08b35b2bb46dec31dcbbd5bb18069f66995df3c9f47f4d64f9281900390910190a25050565b600260009054906101000a90046001600160a01b03166001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b9f57600080fd5b505afa15801562000bb4573d6000803e3d6000fd5b505050506040513d602081101562000bcb57600080fd5b50511562000a37576040805162461bcd60e51b815260206004820152600f60248201526e14118e941493d513d7d4105554d151608a1b604482015290519081900360640190fd5b600260009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c6157600080fd5b505afa15801562000c76573d6000803e3d6000fd5b505050506040513d602081101562000c8d57600080fd5b50516001600160a01b031633148062000cb557503360009081526005602052604090205460ff165b62000a37576040805162461bcd60e51b815260206004820152601360248201527228231d2727aa2fa3a7ab2fa7a92fa0a226a4a760691b604482015290519081900360640190fd5b60005460ff1662000d4c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa62000d8162000ee9565b604080516001600160a01b039092168252519081900360200190a1565b60005460ff161562000dea576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862000d8162000ee9565b600260009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e7157600080fd5b505afa15801562000e86573d6000803e3d6000fd5b505050506040513d602081101562000e9d57600080fd5b50516001600160a01b0316331462000a37576040805162461bcd60e51b815260206004820152600a60248201526928231d2727aa2fa3a7ab60b11b604482015290519081900360640190fd5b3390565b6150438062000efc8339019056fe6101806040523480156200001257600080fd5b50604051620050433803806200504383398181016040526101408110156200003957600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a01516101008b0180519751999b989a969995989497939692959194919392820192846401000000008211156200009257600080fd5b908301906020820185811115620000a857600080fd5b8251640100000000811182820188101715620000c357600080fd5b82525081516020918201929091019080838360005b83811015620000f2578181015183820152602001620000d8565b50505050905090810190601f168015620001205780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200014457600080fd5b9083019060208201858111156200015a57600080fd5b82516401000000008111828201881017156200017557600080fd5b82525081516020918201929091019080838360005b83811015620001a45781810151838201526020016200018a565b50505050905090810190601f168015620001d25780820380516001836020036101000a031916815260200191505b5060405250505081818181818181818160039080519060200190620001f99291906200056e565b5080516200020f9060049060208401906200056e565b50506005805460ff191660121790555073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__955063149851689450620002589350339250506001600160e01b03620004fe169050565b604080516001600160e01b031960e085901b1681526001600160a01b039283166004820152828e166024820152918c16604483015260648201899052608482018890525160a4808301926000929190829003018186803b158015620002bc57600080fd5b505af4158015620002d1573d6000803e3d6000fd5b50505050886001600160a01b03166080816001600160a01b031660601b81525050886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032c57600080fd5b505afa15801562000341573d6000803e3d6000fd5b505050506040513d60208110156200035857600080fd5b505160ff1661014052606088811b6001600160601b031990811660e0528b821b1660a052601086905561016085905233901b610120526012839055604080516342ef033f60e11b81526001600160a01b03808b1660048301528b811660248301529151918916916385de067e916044808201926020929091908290030181600087803b158015620003e857600080fd5b505af1158015620003fd573d6000803e3d6000fd5b505050506040513d60208110156200041457600080fd5b505160601b6001600160601b0319166101005260408051630cf5bc1d60e11b81526001600160a01b038b811660048301529151918816916319eb783a916024808201926020929091908290030181600087803b1580156200047457600080fd5b505af115801562000489573d6000803e3d6000fd5b505050506040513d6020811015620004a057600080fd5b505160601b6001600160601b03191660c05262ed4e00601355604080516000815290517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a916020908290030190a15050505050505050505062000613565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053a57600080fd5b505afa1580156200054f573d6000803e3d6000fd5b505050506040513d60208110156200056657600080fd5b505192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005b157805160ff1916838001178555620005e1565b82800160010185558215620005e1579182015b82811115620005e1578251825591602001919060010190620005c4565b50620005ef929150620005f3565b5090565b6200061091905b80821115620005ef5760008155600101620005fa565b90565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c61014051610160516148fd62000746600039806111395280611c695280612644525080613397525080610d5f5280610da85280610f5f52806119ae5280611ed152806123b15280612c755280613020525080610c875280610e6b528061127752806112f2528061139f52806114195280612e45525080610df3528061225f5280612e6d525080610f8752806112a1528061251052806127285280612c0c5280612f7552806132ac5280613805525080610e43528061124d5280611b4c5280612d4b5280613b28525080610e1b5280611027528061137552806113ea5280611efa528061238d52806127055280612be25280612dd95280612e1d5280612f5352806137d652506148fd6000f3fe608060405234801561001057600080fd5b50600436106103fb5760003560e01c806370a0823111610215578063a9059cbb11610125578063c771c390116100b8578063d82745c811610087578063d82745c814610bfa578063dd62ed3e14610c20578063ee947a7c14610c4e578063eff9884314610c56578063fec984e314610c5e576103fb565b8063c771c39014610b79578063c965b54814610b96578063cc0fef0214610bc4578063d7bd3c9114610bcc576103fb565b8063b69410de116100f4578063b69410de14610acf578063b6b55f2514610ad7578063c374682514610af4578063c59e395914610b53576103fb565b8063a9059cbb14610a4f578063ac64165514610a7b578063aed4966a14610a83578063af6d557114610aa9576103fb565b806384b76824116101a85780639759164a116101775780639759164a146109ec5780639f3c7325146109f4578063a33142f7146109fc578063a43baa3d14610a04578063a457c2d714610a23576103fb565b806384b76824146109885780638905fd4f146109905780639185192a146109b657806395d89b41146109e4576103fb565b806376687d3d116101e457806376687d3d1461093e5780637b99adb11461094657806380cd916d1461096357806380e7ce851461096b576103fb565b806370a08231146108da57806371073bac1461090057806373ef9a50146109085780637666f12514610910576103fb565b80632e1a7d4d1161031057806346c162de116102a357806351b42b001161027257806351b42b001461081c578063613384f214610824578063641ad8a91461084a5780636696779114610876578063681cb10a1461089c576103fb565b806346c162de146107de5780634bb278f3146107e65780634e97415f146107ee5780634f85221a14610814576103fb565b806340504ba0116102df57806340504ba01461074757806340bde09814610775578063410dbf7e1461079b578063443bb293146107b8576103fb565b80632e1a7d4d146106ee578063313ce5671461070b57806339509351146107135780634046af2b1461073f576103fb565b80631831ccf21161039357806323b872dd1161036257806323b872dd1461062857806324600fc31461065e57806324b92e8e1461066657806327f918561461068c5780632ac04ac8146106b8576103fb565b80631831ccf21461057a5780631aa37cec14610582578063209b2bca146105ba57806321c0b342146105c2576103fb565b80630d49b38c116103cf5780630d49b38c1461051957806313bf9e7e14610521578063174a5be41461055457806318160ddd14610572576103fb565b806241c52c14610400578063033b1cf01461043857806306fdde031461045c578063095ea7b3146104d9575b600080fd5b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610c66565b60408051918252519081900360200190f35b610440610c85565b604080516001600160a01b039092168252519081900360200190f35b610464610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610505600480360360408110156104ef57600080fd5b506001600160a01b038135169060200135610d3f565b604080519115158252519081900360200190f35b610440610d5d565b610529610d81565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b61055c610f04565b6040805160ff9092168252519081900360200190f35b610426610f09565b610505610f0f565b6105b86004803603606081101561059857600080fd5b506001600160a01b03813581169160208101359091169060400135610f18565b005b610440611025565b6105f0600480360360408110156105d857600080fd5b506001600160a01b0381358116916020013516611049565b604051808260e080838360005b838110156106155781810151838201526020016105fd565b5050505090500191505060405180910390f35b6105056004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611525565b6105b86115b3565b6104266004803603602081101561067c57600080fd5b50356001600160a01b0316611607565b6105b8600480360360408110156106a257600080fd5b506001600160a01b038135169060200135611619565b6105b8600480360360608110156106ce57600080fd5b506001600160a01b038135811691602081013590911690604001356117ba565b6105b86004803603602081101561070457600080fd5b5035611991565b61055c611aed565b6105056004803603604081101561072957600080fd5b506001600160a01b038135169060200135611af6565b610440611b4a565b6105b86004803603604081101561075d57600080fd5b506001600160a01b0381358116916020013516611b6e565b6104266004803603602081101561078b57600080fd5b50356001600160a01b0316611bef565b6105b8600480360360208110156107b157600080fd5b5035611c58565b610426600480360360208110156107ce57600080fd5b50356001600160a01b0316611d0d565b6105b8611d3f565b6105b8611d6d565b6104266004803603602081101561080457600080fd5b50356001600160a01b0316611e3b565b610505611e80565b6105b8611ea0565b6105056004803603602081101561083a57600080fd5b50356001600160a01b0316611ff9565b61085261200e565b6040518082600281111561086257fe5b60ff16815260200191505060405180910390f35b6104266004803603602081101561088c57600080fd5b50356001600160a01b031661201c565b610426600480360360808110156108b257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612042565b610426600480360360208110156108f057600080fd5b50356001600160a01b03166120ed565b610426612108565b6105b861210e565b6105b86004803603604081101561092657600080fd5b506001600160a01b03813516906020013515156121a4565b61042661220c565b6105b86004803603602081101561095c57600080fd5b5035612212565b61044061225d565b6105056004803603602081101561098157600080fd5b5035612281565b6105b86122d4565b6105b8600480360360208110156109a657600080fd5b50356001600160a01b0316612370565b6105b8600480360360408110156109cc57600080fd5b506001600160a01b0381351690602001351515612445565b6104646124ad565b61044061250e565b610426612532565b610426612538565b6105b860048036036020811015610a1a57600080fd5b5035151561253e565b61050560048036036040811015610a3957600080fd5b506001600160a01b03813516906020013561258d565b61050560048036036040811015610a6557600080fd5b506001600160a01b0381351690602001356125fb565b61042661260f565b61042660048036036020811015610a9957600080fd5b50356001600160a01b0316612615565b61042660048036036020811015610abf57600080fd5b50356001600160a01b0316612630565b610426612642565b6105b860048036036020811015610aed57600080fd5b5035612666565b610b3a600480360360a0811015610b0a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356127a0565b6040805192835260208301919091528051918290030190f35b61050560048036036020811015610b6957600080fd5b50356001600160a01b031661285d565b6105b860048036036020811015610b8f57600080fd5b5035612872565b61042660048036036040811015610bac57600080fd5b506001600160a01b03813581169160200135166128fa565b6105b8612917565b61044060048036036040811015610be257600080fd5b506001600160a01b0381358116916020013516612942565b61042660048036036020811015610c1057600080fd5b50356001600160a01b0316612968565b61042660048036036040811015610c3657600080fd5b506001600160a01b038135811691602001351661297a565b6104266129a5565b6104266129ab565b6104266129b1565b6001600160a01b0381166000908152600860205260409020545b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6129b7565b84846129bb565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63767f5038610dcc7f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6040805160e084901b6001600160e01b03191681526001600160a01b0392831660048201527f0000000000000000000000000000000000000000000000000000000000000000831660248201527f0000000000000000000000000000000000000000000000000000000000000000831660448201527f0000000000000000000000000000000000000000000000000000000000000000831660648201527f000000000000000000000000000000000000000000000000000000000000000090921660848301525160a48083019260a0929190829003018186803b158015610eb257600080fd5b505af4158015610ec6573d6000803e3d6000fd5b505050506040513d60a0811015610edc57600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b600181565b60025490565b60145460ff1681565b610f20612b14565b610f2a6001612b24565b601154610f3d908263ffffffff612b8616565b6011556040805163fbecb17160e01b8152601660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528416608482015260a48101839052905173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163fbecb1719160c4808301926000929190829003018186803b15801561100057600080fd5b505af4158015611014573d6000803e3d6000fd5b50505050611020612be0565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110516146af565b611059612c70565b611061612d40565b6001600160a01b0380841660009081526016602090815260408083208685168452909152808220548151634e71d92d60e01b81529151931692634e71d92d9260048084019360e093929083900390910190829087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156110fc57600080fd5b50601054604051633faa6c5d60e01b815291925060009182918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91633faa6c5d9188917f00000000000000000000000000000000000000000000000000000000000000009190600401808460e08083838c5b8381101561117e578181015183820152602001611166565b50505050905001838152602001828152602001935050505060806040518083038186803b1580156111ae57600080fd5b505af41580156111c2573d6000803e3d6000fd5b505050506040513d60808110156111d857600080fd5b50805160208201516040830151606090930151601154929750909550919350909150821161120e57601180548390039055611232565b601154611224908290840363ffffffff612b8616565b601180546000909155925090505b600c54611245908263ffffffff612b8616565b600c556112727f000000000000000000000000000000000000000000000000000000000000000085612dcc565b61129c7f000000000000000000000000000000000000000000000000000000000000000084612dcc565b6112d57f00000000000000000000000000000000000000000000000000000000000000006112d0848463ffffffff612b8616565b612dcc565b60c0850151156112f0576112f0878660066020020151612e06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c162de6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b5050505061136b611d3f565b611373612be0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d60208110156114a857600080fd5b505160408051918252519081900360200190a36060808601516040805184815260208101869052808201929092529181018590526080810186905290516001600160a01b038916917f21280d282ce6aa29c649fd1825373d7c77892fac3f1958fd98d5ca52dd82a197919081900360a00190a25050505092915050565b6000611532848484613010565b6115a88461153e6129b7565b6115a3856040518060600160405280602881526020016147c3602891396001600160a01b038a1660009081526001602052604081209061157c6129b7565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61318e16565b6129bb565b5060015b9392505050565b6115bb612c70565b60006115c5613225565b9050806115d25750611605565b6115dc33826132aa565b6115e4612be0565b600c546115f7908263ffffffff61332a16565b600c5561160261336c565b50505b565b60156020526000908152604090205481565b336000908152601a602090815260408083206001600160a01b03861684529091528120549061164e828463ffffffff612b8616565b336000908152601b602052604081205491925090611672908563ffffffff612b8616565b905073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63297e7bf786868461169a336120ed565b6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200182815260200194505050505060006040518083038186803b1580156116f557600080fd5b505af4158015611709573d6000803e3d6000fd5b5050336000818152601a602090815260408083206001600160a01b038c16808552908352818420899055848452601b835292819020879055805189815291820188905280519295509293507f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e892908290030190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b0383166000908152601a60209081526040808320338452909152812054906117ef828463ffffffff61332a16565b60408051631b4c903160e01b81526001600160a01b0380891660048301528716602482015260448101869052905191925073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91631b4c903191606480820192600092909190829003018186803b15801561185c57600080fd5b505af4158015611870573d6000803e3d6000fd5b505050506001600160a01b0385166000818152601a602090815260408083203384528252808320859055928252601b9052908120546118af908561332a565b6001600160a01b038088166000818152601b60209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b611999612c70565b60006119a482613390565b90506000806119d27f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6040811015611a3357600080fd5b5080516020909101519092509050611a4b33846133dd565b3360009081526019602052604090205482014203811015611aac576040805162461bcd60e51b8152602060048201526016602482015275140e95d2551211149055d7d393d517d0531313d5d15160521b604482015290519081900360640190fd5b611ab633846134bc565b611abe6115b3565b611adf33611ada611acd613563565b879063ffffffff61332a16565b6132aa565b611ae7612be0565b50505050565b60055460ff1690565b6000610d53611b036129b7565b846115a38560016000611b146129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b8616565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b76612b14565b6001600160a01b038083166000908152601660209081526040808320858516845290915280822054815163175f832960e01b8152915193169263175f83299260048084019391929182900301818387803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90611c4a90611c4590611c39611c34611c25886120ed565b6009549063ffffffff61359216565b6135eb565b9063ffffffff61362c16565b613691565b81611c5157fe5b0492915050565b611c60612b14565b612710611c93827f000000000000000000000000000000000000000000000000000000000000000063ffffffff612b8616565b1115611cd2576040805162461bcd60e51b8152602060048201526009602482015268503a4241445f46454560b81b604482015290519081900360640190fd5b60108190556040805182815290517f9408bb8c08d29b335e36090045074610352365476d9df02e203c25db4fcd67c09181900360200190a150565b6001600160a01b038116600090815260086020526040812054610d5790611d3384611e3b565b9063ffffffff61332a16565b6000611d4961336c565b905060008113611d595750611605565b611d6a611d6582613691565b6136d2565b50565b611d75612b14565b611d7f6000612b24565b6000611d89610d81565b50509250505080611dd1576040805162461bcd60e51b815260206004820152600d60248201526c503a494e5355465f5354414b4560981b604482015290519081900360640190fd5b601480546001919061ff0019166101008302179055506014546040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a91610100900460ff169080826002811115611e2557fe5b60ff16815260200191505060405180910390a150565b6001600160a01b038116600090815260076020526040812054600160801b90611c4a90611c4590611c39611c34611e71886120ed565b6006549063ffffffff61359216565b60006001601454610100900460ff166002811115611e9a57fe5b14905090565b611ea8612b14565b611eb26001612b24565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63abbedb40611ef57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6011547f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b03168152602001935050505060006040518083038186803b158015611f7f57600080fd5b505af4158015611f93573d6000803e3d6000fd5b50506014805461ff00191661020017908190556040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a935061010090910460ff16915080826002811115611fe457fe5b60ff16815260200191505060405180910390a1565b60176020526000908152604090205460ff1681565b601454610100900460ff1681565b6001600160a01b0381166000908152600b6020526040812054610d5790611d3384611bef565b6040805163340e588560e11b81526001600160a01b0380871660048301528086166024830152808516604483015283166064820152905160009173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163681cb10a91608480820192602092909190829003018186803b1580156120b857600080fd5b505af41580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505195945050505050565b6001600160a01b031660009081526020819052604090205490565b600c5481565b6000612119336120ed565b1415612159576040805162461bcd60e51b815260206004820152600a602482015269140e96915493d7d0905360b21b604482015290519081900360640190fd5b336000818152601960209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6121ac612b14565b6001600160a01b038216600081815260186020908152604091829020805460ff1916851515908117909155825190815291517fdf56132520665b33cd5731c5cfbacd8bee82524e67df563bb25b2be304f91d449281900390910190a25050565b60125481565b61221a612c70565b612222612d40565b60128190556040805182815290517f3ff20538222f568f27ff436c0c49dfd3e48d5b8f86533a3f759dc1c7089775ab9181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145460009060ff16806122a457503360009081526018602052604090205460ff165b8015610d5757506012546122cc836122c06011546122c06137d2565b9063ffffffff612b8616565b111592915050565b33600090815260196020526040902054612329576040805162461bcd60e51b8152602060048201526011602482015270503a4e4f545f5749544844524157494e4760781b604482015290519081900360640190fd5b3360008181526019602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63a89d5ddb827f00000000000000000000000000000000000000000000000000000000000000006123d57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015290516064808301926000929190829003018186803b15801561242a57600080fd5b505af415801561243e573d6000803e3d6000fd5b5050505050565b61244d612b14565b6001600160a01b038216600081815260176020908152604091829020805460ff1916851515908117909155825190815291517f353578bbc0ab907b7018b0f7b50b5f822d31dc9fcf4c16fffa780e109ca7c9309281900390910190a25050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b600d5481565b612546612b14565b6014805482151560ff19909116811790915560408051918252517feeba6fd794e30165023f7e3d017e92901622076a95d36e45906955e025ff4fe79181900360200190a150565b6000610d5361259a6129b7565b846115a3856040518060600160405280602581526020016148a360259139600160006125c46129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61318e16565b6000610d536126086129b7565b8484613010565b60115481565b6001600160a01b03166000908152600b602052604090205490565b601b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61266e612c70565b6126786001612b24565b61268181612281565b6126c6576040805162461bcd60e51b8152602060048201526011602482015270140e91115417d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b3360009081526019602052604081208190556126e182613390565b90506126f860156126f1336120ed565b833361389b565b6127536001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61395416565b61275d33826139ae565b612765612be0565b6040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a25050565b6040805163c374682560e01b81526001600160a01b0380881660048301528087166024830152808616604483015284166064820152608481018390528151600092839273__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9263c37468259260a480840193919291829003018186803b15801561281c57600080fd5b505af4158015612830573d6000803e3d6000fd5b505050506040513d604081101561284657600080fd5b508051602090910151909890975095505050505050565b60186020526000908152604090205460ff1681565b61287a612b14565b6013548111156128bf576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f56414c554560a81b604482015290519081900360640190fd5b60138190556040805182815290517f3094b4ce0463766c3cd81ed2ae2451610dcac39a1061fa023ca9d3d4df959f759181900360200190a150565b601a60209081526000928352604080842090915290825290205481565b60006129216139fa565b9050600081136129315750611605565b611d6a61293d82613691565b613a18565b60166020908152600092835260408084209091529082529020546001600160a01b031681565b60196020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60135481565b60105481565b600f5481565b3390565b6001600160a01b038316612a005760405162461bcd60e51b81526004018080602001828103825260248152602001806148316024913960400191505060405180910390fd5b6001600160a01b038216612a455760405162461bcd60e51b81526004018080602001828103825260228152602001806147136022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d6020811015612b0c57600080fd5b505192915050565b612b1c613b1d565b611605612c70565b806002811115612b3057fe5b601454610100900460ff166002811115612b4657fe5b14611d6a576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f535441544560a81b604482015290519081900360640190fd5b6000828201838110156115ac576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a2612c5d6137d2565b60408051918252519081900360200190a3565b612c997f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b158015612cd157600080fd5b505afa158015612ce5573d6000803e3d6000fd5b505050506040513d6020811015612cfb57600080fd5b505115611605576040805162461bcd60e51b815260206004820152600e60248201526d140e941493d513d7d4105554d15160921b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612d8657503360009081526017602052604090205460ff165b611605576040805162461bcd60e51b8152602060048201526012602482015271281d2727aa2fa222a62fa7a92fa0a226a4a760711b604482015290519081900360640190fd5b6116026001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff613b8616565b6040805162715b0960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526064810183905290516000918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91630715b09091608480820192606092909190829003018186803b158015612ede57600080fd5b505af4158015612ef2573d6000803e3d6000fd5b505050506040513d6060811015612f0857600080fd5b5080516020820151604090920151909450909250905080841115612f4657600d54612f3b9082860363ffffffff612b8616565b600d55612f46612917565b612fa06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008363ffffffff613b8616565b601154612fb3908563ffffffff61332a16565b60115560408051858152602081018590528082018490526060810183905290516001600160a01b038716917fd393d18014c1898545668c52621bced9493753be5b8138f2539542ca606732eb919081900360800190a25050505050565b613018612c70565b6000806130447f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b15801561307b57600080fd5b505afa15801561308f573d6000803e3d6000fd5b505050506040513d60408110156130a557600080fd5b50805160209091015190925090506130bd85846133dd565b6001600160a01b038416600090815260196020526040902054820181014211613120576040805162461bcd60e51b815260206004820152601060248201526f140e9513d7d393d517d0531313d5d15160821b604482015290519081900360640190fd5b600061312b8661201c565b1461316e576040805162461bcd60e51b815260206004820152600e60248201526d503a5245434f475f4c4f5353455360901b604482015290519081900360640190fd5b613183601561317c866120ed565b858761389b565b61243e858585613bd8565b6000818484111561321d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131e25781810151838201526020016131ca565b50505050905090810190601f16801561320f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061323033611d0d565b3360009081526008602052604081205491925090613254908363ffffffff612b8616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611bd357600080fd5b60006115ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061318e565b600e8054600c549182905560009161338a908263ffffffff613d0416565b91505090565b6000610d577f0000000000000000000000000000000000000000000000000000000000000000600a0a6133d184670de0b6b3a764000063ffffffff61359216565b9063ffffffff613d6916565b6013546001600160a01b038316600090815260156020526040902054429161340b919063ffffffff612b8616565b111561344f576040805162461bcd60e51b815260206004820152600e60248201526d140e9195539114d7d313d0d2d15160921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205461347582611d33856120ed565b1015611602576040805162461bcd60e51b8152602060048201526011602482015270140e925394d55197d514905394d7d09053607a1b604482015290519081900360640190fd5b6134c68282613dab565b60006135086134e3611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b600061356d613e52565b600d54909150613583908263ffffffff61332a16565b600d5561358e6139fa565b5090565b6000826135a157506000610d57565b828202828482816135ae57fe5b04146115ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806147a26021913960400191505060405180910390fd5b806000811215610c80576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b60008282018183128015906136415750838112155b80613656575060008312801561365657508381125b6115ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061475b6021913960400191505060405180910390fd5b60008082121561358e576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b60006136dc610f09565b11613720576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b8061372a57611d6a565b613761613735610f09565b61374983600160801b63ffffffff61359216565b8161375057fe5b60065491900463ffffffff612b8616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561386a57600080fd5b505afa15801561387e573d6000803e3d6000fd5b505050506040513d602081101561389457600080fd5b5051905090565b6001600160a01b038116600090815260208590526040812054908484016138c257816138f8565b6138f86138eb8686016133d1876138df428863ffffffff61332a16565b9063ffffffff61359216565b839063ffffffff612b8616565b6001600160a01b038416600081815260208981526040918290208490558151848152915193945091927ff9b842c70d79466435b46540bb988aa5c998b3243bf91c36380ddb5887c0f0e4929181900390910190a2505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ae7908590613ed7565b6139b88282613f88565b60006135086139d5611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff613d0416565b600f8054600d549182905560009161338a908263ffffffff613d0416565b6000613a22610f09565b11613a66576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80613a7057611d6a565b6000613aa9613a7d610f09565b613a9184600160801b63ffffffff61359216565b81613a9857fe5b60095491900463ffffffff612b8616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611605576040805162461bcd60e51b8152602060048201526009602482015268140e9393d517d1115360ba1b604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611020908490613ed7565b613be3838383613fd4565b6000613bfd611c348360095461359290919063ffffffff16565b6001600160a01b0385166000908152600a602052604081205491925090613c2a908363ffffffff61362c16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613c64908463ffffffff613d0416565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6000818303818312801590613d195750838113155b80613d2e5750600083128015613d2e57508381135b6115ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806148556024913960400191505060405180910390fd5b60006115ac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b613db58282614165565b6000613df7613dd2611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b6000613e5d3361201c565b336000908152600b602052604081205491925090613e81908363ffffffff612b8616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6060613f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661426d9092919063ffffffff16565b80519091501561102057808060200190516020811015613f4b57600080fd5b50516110205760405162461bcd60e51b815260040180806020018281038252602a815260200180614879602a913960400191505060405180910390fd5b613f928282614284565b6000613df7613faf611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff613d0416565b613fdf838383614380565b6000613ff9611c348360065461359290919063ffffffff16565b6001600160a01b03851660009081526007602052604081205491925090614026908363ffffffff61362c16565b6001600160a01b0380871660009081526007602052604080822084905591871681529081205491925090614060908463ffffffff613d0416565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b6000818361414f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131e25781810151838201526020016131ca565b50600083858161415b57fe5b0495945050505050565b6001600160a01b0382166141aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806147eb6021913960400191505060405180910390fd5b6141b682600083611020565b6141f9816040518060600160405280602281526020016146f1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b038316600090815260208190526040902055600254614225908263ffffffff61332a16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b606061427c84846000856144e7565b949350505050565b6001600160a01b0382166142df576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6142eb60008383611020565b6002546142fe908263ffffffff612b8616565b6002556001600160a01b03821660009081526020819052604090205461432a908263ffffffff612b8616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166143c55760405162461bcd60e51b815260040180806020018281038252602581526020018061480c6025913960400191505060405180910390fd5b6001600160a01b03821661440a5760405162461bcd60e51b81526004018080602001828103825260238152602001806146ce6023913960400191505060405180910390fd5b614415838383611020565b61445881604051806060016040528060268152602001614735602691396001600160a01b038616600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461448d908263ffffffff612b8616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6060824710156145285760405162461bcd60e51b815260040180806020018281038252602681526020018061477c6026913960400191505060405180910390fd5b61453185614643565b614582576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614623576040519150601f19603f3d011682016040523d82523d6000602084013e614628565b606091505b5091509150614638828286614649565b979650505050505050565b3b151590565b606083156146585750816115ac565b8251156146685782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156131e25781810151838201526020016131ca565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec572c132b8c22ad83f829932565be6106a16d99ce4d467ff59c7503f0a88ad564736f6c634300060b0033a2646970667358221220c37f2d0fc10913e7ed91670a97619b039bbe56d4d251f5ecdbb14bec9d22992864736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x5FE3 CODESIZE SUB DUP1 PUSH2 0x5FE3 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x5F74 DUP1 PUSH2 0x6F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH3 0xE2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x945164E7 GT PUSH3 0x99 JUMPI DUP1 PUSH4 0xC3124525 GT PUSH3 0x6F JUMPI DUP1 PUSH4 0xC3124525 EQ PUSH3 0x23A JUMPI DUP1 PUSH4 0xC5BA73ED EQ PUSH3 0x244 JUMPI DUP1 PUSH4 0xCC2E0A26 EQ PUSH3 0x24E JUMPI DUP1 PUSH4 0xF3F616C0 EQ PUSH3 0x277 JUMPI PUSH3 0xE2 JUMP JUMPDEST DUP1 PUSH4 0x945164E7 EQ PUSH3 0x1DE JUMPI DUP1 PUSH4 0x9F71F14A EQ PUSH3 0x1FA JUMPI DUP1 PUSH4 0xAC4AFA38 EQ PUSH3 0x21A JUMPI PUSH3 0xE2 JUMP JUMPDEST DUP1 PUSH4 0x312B8982 EQ PUSH3 0xE7 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH3 0x158 JUMPI DUP1 PUSH4 0x5B16EBB7 EQ PUSH3 0x164 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH3 0x1A1 JUMPI DUP1 PUSH4 0x6050ABB2 EQ PUSH3 0x1AB JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH3 0x1D4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH3 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH3 0x2A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x162 PUSH3 0xA23 JUMP JUMPDEST STOP JUMPDEST PUSH3 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xA39 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x18D PUSH3 0xA4E JUMP JUMPDEST PUSH3 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xA57 JUMP JUMPDEST PUSH3 0x162 PUSH3 0xA6C JUMP JUMPDEST PUSH3 0x1E8 PUSH3 0xA80 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x204 PUSH3 0xA86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH3 0xA8B JUMP JUMPDEST PUSH3 0x13C PUSH3 0xAA6 JUMP JUMPDEST PUSH3 0x204 PUSH3 0xAB5 JUMP JUMPDEST PUSH3 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xABA JUMP JUMPDEST PUSH3 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH3 0xAE6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0x2F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH3 0x2FF PUSH3 0xB50 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x3 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x372 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x389 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH3 0x3CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x28231D24A72B20A624A22FA62623 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 MLOAD SWAP2 DUP4 AND SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x440 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x457 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH3 0x49C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x28231D24A72B20A624A22FA9A623 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B971AA3 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x372E3546 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x4F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x50F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH3 0x555 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x50463A4E4F545F44454C4547415445 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD PUSH16 0x26B0B83632902837B7B6102A37B5B2B7 PUSH1 0x81 SHL DUP2 MSTORE POP SWAP1 POP PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x4D504C2D4C5 PUSH1 0xD4 SHL DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 CALLER DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH3 0x5C0 SWAP1 PUSH3 0xEED JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP11 DUP3 AND PUSH1 0x40 DUP5 ADD MSTORE DUP10 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE SWAP1 DUP9 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP6 SWAP1 MSTORE PUSH2 0x140 PUSH2 0x100 DUP4 ADD DUP2 DUP2 MSTORE DUP6 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD SWAP1 SWAP2 PUSH2 0x120 DUP5 ADD SWAP2 PUSH2 0x160 DUP6 ADD SWAP2 DUP8 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x64D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x633 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x67B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x6B0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x696 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x6DE JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x70A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP1 POP DUP1 SWAP4 POP DUP4 PUSH1 0x3 PUSH1 0x0 PUSH1 0x1 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x4 PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 ADD SWAP2 SWAP1 POP DUP2 SWAP1 SSTORE POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xCA6C57D58DE1FF84C629EA4A44B3A2F19A6C83CC1DC3CD7D1EDE2067A6A1016D DUP14 DUP14 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9759164A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x81E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH3 0x33B1CF PUSH1 0xE4 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x33B1CF0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x88C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x8A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP14 DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x96E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x954 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x99C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x9D1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9B7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x9FF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH3 0xA2D PUSH3 0xC12 JUMP JUMPDEST PUSH3 0xA37 PUSH3 0xCFD JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH3 0xA76 PUSH3 0xC12 JUMP JUMPDEST PUSH3 0xA37 PUSH3 0xD9E JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 JUMP JUMPDEST PUSH3 0xAC4 PUSH3 0xE22 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH3 0xAF0 PUSH3 0xE22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xC0D8AE32722EAFE08B35B2BB46DEC31DCBBD5BB18069F66995DF3C9F47F4D64F SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xB9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xBB4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xBCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH3 0xA37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x14118E941493D513D7D4105554D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xC61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xC76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xC8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH3 0xCB5 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH3 0xA37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x28231D2727AA2FA3A7AB2FA7A92FA0A226A4A7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH3 0xD4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH3 0xD81 PUSH3 0xEE9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0xDEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH3 0xD81 PUSH3 0xEE9 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xE71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xE86 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xE9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0xA37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x28231D2727AA2FA3A7AB PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x5043 DUP1 PUSH3 0xEFC DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5043 CODESIZE SUB DUP1 PUSH3 0x5043 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH2 0x140 DUP2 LT ISZERO PUSH3 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xC0 DUP10 ADD MLOAD PUSH1 0xE0 DUP11 ADD MLOAD PUSH2 0x100 DUP12 ADD DUP1 MLOAD SWAP8 MLOAD SWAP10 SWAP12 SWAP9 SWAP11 SWAP7 SWAP10 SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP2 SWAP4 SWAP3 DUP3 ADD SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0xA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0xC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x120 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x18A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1D2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x1F9 SWAP3 SWAP2 SWAP1 PUSH3 0x56E JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x20F SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x56E JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH20 0x0 SWAP6 POP PUSH4 0x14985168 SWAP5 POP PUSH3 0x258 SWAP4 POP CALLER SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x4FE AND SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP15 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP13 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP9 SWAP1 MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH3 0x2D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x341 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH2 0x140 MSTORE PUSH1 0x60 DUP9 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE DUP12 DUP3 SHL AND PUSH1 0xA0 MSTORE PUSH1 0x10 DUP7 SWAP1 SSTORE PUSH2 0x160 DUP6 SWAP1 MSTORE CALLER SWAP1 SHL PUSH2 0x120 MSTORE PUSH1 0x12 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x42EF033F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x4 DUP4 ADD MSTORE DUP12 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x85DE067E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x3FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xCF5BC1D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP9 AND SWAP2 PUSH4 0x19EB783A SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x474 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0xC0 MSTORE PUSH3 0xED4E00 PUSH1 0x13 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP PUSH3 0x613 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x54F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x5B1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x5E1 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x5E1 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x5E1 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x5C4 JUMP JUMPDEST POP PUSH3 0x5EF SWAP3 SWAP2 POP PUSH3 0x5F3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x610 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x5EF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x5FA JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x48FD PUSH3 0x746 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1139 MSTORE DUP1 PUSH2 0x1C69 MSTORE DUP1 PUSH2 0x2644 MSTORE POP DUP1 PUSH2 0x3397 MSTORE POP DUP1 PUSH2 0xD5F MSTORE DUP1 PUSH2 0xDA8 MSTORE DUP1 PUSH2 0xF5F MSTORE DUP1 PUSH2 0x19AE MSTORE DUP1 PUSH2 0x1ED1 MSTORE DUP1 PUSH2 0x23B1 MSTORE DUP1 PUSH2 0x2C75 MSTORE DUP1 PUSH2 0x3020 MSTORE POP DUP1 PUSH2 0xC87 MSTORE DUP1 PUSH2 0xE6B MSTORE DUP1 PUSH2 0x1277 MSTORE DUP1 PUSH2 0x12F2 MSTORE DUP1 PUSH2 0x139F MSTORE DUP1 PUSH2 0x1419 MSTORE DUP1 PUSH2 0x2E45 MSTORE POP DUP1 PUSH2 0xDF3 MSTORE DUP1 PUSH2 0x225F MSTORE DUP1 PUSH2 0x2E6D MSTORE POP DUP1 PUSH2 0xF87 MSTORE DUP1 PUSH2 0x12A1 MSTORE DUP1 PUSH2 0x2510 MSTORE DUP1 PUSH2 0x2728 MSTORE DUP1 PUSH2 0x2C0C MSTORE DUP1 PUSH2 0x2F75 MSTORE DUP1 PUSH2 0x32AC MSTORE DUP1 PUSH2 0x3805 MSTORE POP DUP1 PUSH2 0xE43 MSTORE DUP1 PUSH2 0x124D MSTORE DUP1 PUSH2 0x1B4C MSTORE DUP1 PUSH2 0x2D4B MSTORE DUP1 PUSH2 0x3B28 MSTORE POP DUP1 PUSH2 0xE1B MSTORE DUP1 PUSH2 0x1027 MSTORE DUP1 PUSH2 0x1375 MSTORE DUP1 PUSH2 0x13EA MSTORE DUP1 PUSH2 0x1EFA MSTORE DUP1 PUSH2 0x238D MSTORE DUP1 PUSH2 0x2705 MSTORE DUP1 PUSH2 0x2BE2 MSTORE DUP1 PUSH2 0x2DD9 MSTORE DUP1 PUSH2 0x2E1D MSTORE DUP1 PUSH2 0x2F53 MSTORE DUP1 PUSH2 0x37D6 MSTORE POP PUSH2 0x48FD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xC771C390 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD82745C8 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD82745C8 EQ PUSH2 0xBFA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC20 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0xC4E JUMPI DUP1 PUSH4 0xEFF98843 EQ PUSH2 0xC56 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0xC5E JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xC771C390 EQ PUSH2 0xB79 JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0xBC4 JUMPI DUP1 PUSH4 0xD7BD3C91 EQ PUSH2 0xBCC JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xB69410DE GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB69410DE EQ PUSH2 0xACF JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0xAF4 JUMPI DUP1 PUSH4 0xC59E3959 EQ PUSH2 0xB53 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0xAC641655 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0xA83 JUMPI DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0xAA9 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x9759164A GT PUSH2 0x177 JUMPI DUP1 PUSH4 0x9759164A EQ PUSH2 0x9EC JUMPI DUP1 PUSH4 0x9F3C7325 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xA33142F7 EQ PUSH2 0x9FC JUMPI DUP1 PUSH4 0xA43BAA3D EQ PUSH2 0xA04 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xA23 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 EQ PUSH2 0x988 JUMPI DUP1 PUSH4 0x8905FD4F EQ PUSH2 0x990 JUMPI DUP1 PUSH4 0x9185192A EQ PUSH2 0x9B6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x9E4 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x76687D3D GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x76687D3D EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x7B99ADB1 EQ PUSH2 0x946 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0x80E7CE85 EQ PUSH2 0x96B JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8DA JUMPI DUP1 PUSH4 0x71073BAC EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0x73EF9A50 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0x7666F125 EQ PUSH2 0x910 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x51B42B00 GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x51B42B00 EQ PUSH2 0x81C JUMPI DUP1 PUSH4 0x613384F2 EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0x641AD8A9 EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x876 JUMPI DUP1 PUSH4 0x681CB10A EQ PUSH2 0x89C JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x7DE JUMPI DUP1 PUSH4 0x4BB278F3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x7EE JUMPI DUP1 PUSH4 0x4F85221A EQ PUSH2 0x814 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x40504BA0 GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x40504BA0 EQ PUSH2 0x747 JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x410DBF7E EQ PUSH2 0x79B JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x7B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x4046AF2B EQ PUSH2 0x73F JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x24B92E8E EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x68C JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x6B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0x1AA37CEC EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0x21C0B342 EQ PUSH2 0x5C2 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xD49B38C GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0xD49B38C EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x13BF9E7E EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x572 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x33B1CF0 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x4D9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC66 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x464 PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x486 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4CB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x529 PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x55C PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x505 PUSH2 0xF0F JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF18 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x440 PUSH2 0x1025 JUMP JUMPDEST PUSH2 0x5F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xE0 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1525 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1607 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1619 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x17BA JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x1AED JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x1B4A JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D6D JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E3B JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1E80 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1EA0 JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x83A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1FF9 JUMP JUMPDEST PUSH2 0x852 PUSH2 0x200E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x862 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x201C JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x2042 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2108 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x210E JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x220C JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2212 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x981 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x22D4 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2370 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2445 JUMP JUMPDEST PUSH2 0x464 PUSH2 0x24AD JUMP JUMPDEST PUSH2 0x440 PUSH2 0x250E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x253E JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x258D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x260F JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2615 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2642 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2666 JUMP JUMPDEST PUSH2 0xB3A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x285D JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2872 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x28FA JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x2942 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2968 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x297A JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29AB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD18 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0xD4C PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0x0 PUSH4 0x767F5038 PUSH2 0xDCC PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP5 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x0 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xEC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF20 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0xF2A PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xF3D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFBECB171 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x16 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0x0 SWAP2 PUSH4 0xFBECB171 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1014 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1020 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1051 PUSH2 0x46AF JUMP JUMPDEST PUSH2 0x1059 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x1061 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x4E71D92D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x4E71D92D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 PUSH1 0xE0 SWAP4 SWAP3 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3FAA6C5D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x3FAA6C5D SWAP2 DUP9 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0xE0 DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x117E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1166 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD PUSH1 0x11 SLOAD SWAP3 SWAP8 POP SWAP1 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP3 GT PUSH2 0x120E JUMPI PUSH1 0x11 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1232 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x1224 SWAP1 DUP3 SWAP1 DUP5 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x0 SWAP1 SWAP2 SSTORE SWAP3 POP SWAP1 POP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1245 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1272 PUSH32 0x0 DUP6 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x129C PUSH32 0x0 DUP5 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x12D5 PUSH32 0x0 PUSH2 0x12D0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH2 0x2DCC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD ISZERO PUSH2 0x12F0 JUMPI PUSH2 0x12F0 DUP8 DUP7 PUSH1 0x6 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x2E06 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x46C162DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x136B PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x1373 PUSH2 0x2BE0 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 PUSH1 0x60 DUP1 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH32 0x21280D282CE6AA29C649FD1825373D7C77892FAC3F1958FD98D5CA52DD82A197 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 LOG2 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1532 DUP5 DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH2 0x15A8 DUP5 PUSH2 0x153E PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x47C3 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x157C PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x15BB PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C5 PUSH2 0x3225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x15D2 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x15DC CALLER DUP3 PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x15E4 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x15F7 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1602 PUSH2 0x336C JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x164E DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1672 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST SWAP1 POP PUSH20 0x0 PUSH4 0x297E7BF7 DUP7 DUP7 DUP5 PUSH2 0x169A CALLER PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1709 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP10 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x1B DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP8 SWAP1 SSTORE DUP1 MLOAD DUP10 DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP6 POP SWAP3 SWAP4 POP PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x17EF DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B4C9031 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x1B4C9031 SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x1B SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x18AF SWAP1 DUP6 PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP10 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 DUP10 AND SWAP4 SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xFAA022EA2CD7F14157070896FABADAFE96CC4D4714EEF7AE6A992A5084493ED5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG4 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1999 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19A4 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x19D2 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1A4B CALLER DUP5 PUSH2 0x33DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD TIMESTAMP SUB DUP2 LT ISZERO PUSH2 0x1AAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x140E95D2551211149055D7D393D517D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1AB6 CALLER DUP5 PUSH2 0x34BC JUMP JUMPDEST PUSH2 0x1ABE PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x1ADF CALLER PUSH2 0x1ADA PUSH2 0x1ACD PUSH2 0x3563 JUMP JUMPDEST DUP8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x1AE7 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x1B03 PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1B14 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B76 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x175F8329 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x175F8329 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1C25 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH2 0x35EB JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH2 0x3691 JUMP JUMPDEST DUP2 PUSH2 0x1C51 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C60 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x1C93 DUP3 PUSH32 0x0 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1CD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x503A4241445F464545 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x9408BB8C08D29B335E36090045074610352365476D9DF02E203C25DB4FCD67C0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1E3B JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D49 PUSH2 0x336C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1D59 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x1D65 DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x36D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D75 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1D7F PUSH1 0x0 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D89 PUSH2 0xD81 JUMP JUMPDEST POP POP SWAP3 POP POP POP DUP1 PUSH2 0x1DD1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x503A494E5355465F5354414B45 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x14 SLOAD PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E25 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1E71 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E9A JUMPI INVALID JUMPDEST EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA8 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1EB2 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xABBEDB40 PUSH2 0x1EF5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH32 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x14 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x200 OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP4 POP PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP2 POP DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FE4 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1BEF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x340E5885 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x681CB10A SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2119 CALLER PUSH2 0x20ED JUMP JUMPDEST EQ ISZERO PUSH2 0x2159 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x140E96915493D7D09053 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 DUP2 SWAP1 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH2 0x21AC PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xDF56132520665B33CD5731C5CFBACD8BEE82524E67DF563BB25B2BE304F91D44 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x221A PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2222 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x12 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3FF20538222F568F27FF436C0C49DFD3E48D5B8F86533A3F759DC1C7089775AB SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x22A4 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 ISZERO PUSH2 0xD57 JUMPI POP PUSH1 0x12 SLOAD PUSH2 0x22CC DUP4 PUSH2 0x22C0 PUSH1 0x11 SLOAD PUSH2 0x22C0 PUSH2 0x37D2 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x503A4E4F545F5749544844524157494E47 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE DUP1 MLOAD SWAP3 DUP4 MSTORE MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xA89D5DDB DUP3 PUSH32 0x0 PUSH2 0x23D5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x242A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x243E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x244D PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x353578BBC0AB907B7018B0F7B50B5F822D31DC9FCF4C16FFFA780E109CA7C930 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2546 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x14 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xEEBA6FD794E30165023F7E3D017E92901622076A95D36E45906955E025FF4FE7 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x259A PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x48A3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x25C4 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x2608 PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x266E PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2678 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH2 0x2681 DUP2 PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x26C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E91115417D393D517D0531313D5D151 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x26E1 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH2 0x26F8 PUSH1 0x15 PUSH2 0x26F1 CALLER PUSH2 0x20ED JUMP JUMPDEST DUP4 CALLER PUSH2 0x389B JUMP JUMPDEST PUSH2 0x2753 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER PUSH32 0x0 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x3954 AND JUMP JUMPDEST PUSH2 0x275D CALLER DUP3 PUSH2 0x39AE JUMP JUMPDEST PUSH2 0x2765 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3746825 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH20 0x0 SWAP3 PUSH4 0xC3746825 SWAP3 PUSH1 0xA4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x287A PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 GT ISZERO PUSH2 0x28BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F56414C5545 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3094B4CE0463766C3CD81ED2AE2451610DCAC39A1061FA023CA9D3D4DF959F75 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2921 PUSH2 0x39FA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x2931 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x293D DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x3A18 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2A00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4831 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4713 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B1C PUSH2 0x3B1D JUMP JUMPDEST PUSH2 0x1605 PUSH2 0x2C70 JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B30 JUMPI INVALID JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B46 JUMPI INVALID JUMPDEST EQ PUSH2 0x1D6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F5354415445 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH2 0x2C5D PUSH2 0x37D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 JUMP JUMPDEST PUSH2 0x2C99 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E941493D513D7D4105554D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x2D86 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D2727AA2FA222A62FA7A92FA0A226A4A7 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1602 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x715B09 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x715B090 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2F46 JUMPI PUSH1 0xD SLOAD PUSH2 0x2F3B SWAP1 DUP3 DUP7 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x2F46 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x2FA0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x2FB3 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xD393D18014C1898545668C52621BCED9493753BE5B8138F2539542CA606732EB SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3018 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3044 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x308F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x30BD DUP6 DUP5 PUSH2 0x33DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP2 ADD TIMESTAMP GT PUSH2 0x3120 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x140E9513D7D393D517D0531313D5D151 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x312B DUP7 PUSH2 0x201C JUMP JUMPDEST EQ PUSH2 0x316E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A5245434F475F4C4F53534553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3183 PUSH1 0x15 PUSH2 0x317C DUP7 PUSH2 0x20ED JUMP JUMPDEST DUP6 DUP8 PUSH2 0x389B JUMP JUMPDEST PUSH2 0x243E DUP6 DUP6 DUP6 PUSH2 0x3BD8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x320F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3230 CALLER PUSH2 0x1D0D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3254 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xFBC3A599B784FE88772FC5ABCC07223F64CA0B13ACC341F4FB1E46BEF0510EB4 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x318E JUMP JUMPDEST PUSH1 0xE DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD57 PUSH32 0x0 PUSH1 0xA EXP PUSH2 0x33D1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D69 AND JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x340B SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E9195539114D7D313D0D2D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3475 DUP3 PUSH2 0x1D33 DUP6 PUSH2 0x20ED JUMP JUMPDEST LT ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E925394D55197D514905394D7D09053 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x34C6 DUP3 DUP3 PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x34E3 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x356D PUSH2 0x3E52 JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 SWAP2 POP PUSH2 0x3583 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x358E PUSH2 0x39FA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35A1 JUMPI POP PUSH1 0x0 PUSH2 0xD57 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x35AE JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47A2 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x29A6AA9D27A7A1 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3641 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x3656 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3656 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x475B PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x534D493A4E4547 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36DC PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3720 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x372A JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH2 0x3761 PUSH2 0x3735 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3749 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3750 JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x6 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x26536799ACE2C3DBE12E638EC3ADE6B4173DCF1289BE0A58D51A5003015649BD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x1F8D7705F31C3337A080803A8AD7E71946FB88D84738879BE2BF402F97156E96 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x386A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x387E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP5 DUP5 ADD PUSH2 0x38C2 JUMPI DUP2 PUSH2 0x38F8 JUMP JUMPDEST PUSH2 0x38F8 PUSH2 0x38EB DUP7 DUP7 ADD PUSH2 0x33D1 DUP8 PUSH2 0x38DF TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF9B842C70D79466435B46540BB988AA5C998B3243BF91C36380DDB5887C0F0E4 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1AE7 SWAP1 DUP6 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x39B8 DUP3 DUP3 PUSH2 0x3F88 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x39D5 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0xF DUP1 SLOAD PUSH1 0xD SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A22 PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3A66 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x3A70 JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA9 PUSH2 0x3A7D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3A91 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3A98 JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x9 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP CALLER SWAP2 PUSH32 0xF88156A8032A0D2C65DF18FAFAF84E0BEA647B3D94A0F7FC6AB14C97DEC2BF74 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x240CE2B5CE9E9E5A70010C7F8034C233D89B7CE2D60F3A38D9BC3CA01A36F88C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x140E9393D517D11153 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1020 SWAP1 DUP5 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x3BE3 DUP4 DUP4 DUP4 PUSH2 0x3FD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BFD PUSH2 0x1C34 DUP4 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C2A SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C64 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3D19 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x3D2E JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3D2E JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4855 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x4100 JUMP JUMPDEST PUSH2 0x3DB5 DUP3 DUP3 PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3DD2 PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E5D CALLER PUSH2 0x201C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3E81 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0x814EBA35782909DBBAEEFB8104073DFCA45DE43173F7077970C1584B3CF918B5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F2C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x426D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1020 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4879 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3F92 DUP3 DUP3 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3FAF PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH2 0x3FDF DUP4 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 PUSH2 0x1C34 DUP4 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4026 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4060 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x414F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x415B JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47EB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41B6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x41F9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x46F1 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x4225 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x427C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x44E7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x42DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x42EB PUSH1 0x0 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x42FE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x432A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x43C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x480C PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x440A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x46CE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4415 DUP4 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x4458 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4735 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x448D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x4528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x477C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4531 DUP6 PUSH2 0x4643 JUMP JUMPDEST PUSH2 0x4582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x45C1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x45A2 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4623 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4628 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4638 DUP3 DUP3 DUP7 PUSH2 0x4649 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4658 JUMPI POP DUP2 PUSH2 0x15AC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4668 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E63655369676E PUSH6 0x64536166654D PUSH2 0x7468 GASPRICE KECCAK256 PUSH2 0x6464 PUSH10 0x74696F6E206F76657266 PUSH13 0x6F77416464726573733A20696E PUSH20 0x756666696369656E742062616C616E636520666F PUSH19 0x2063616C6C536166654D6174683A206D756C74 PUSH10 0x706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A207375627472616374696F6E206F766572666C PUSH16 0x775361666545524332303A2045524332 ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x75636365656445524332303A2064656372656173 PUSH6 0x6420616C6C6F PUSH24 0x616E63652062656C6F77207A65726FA26469706673582212 KECCAK256 0xEC JUMPI 0x2C SGT 0x2B DUP13 0x22 0xAD DUP4 0xF8 0x29 SWAP4 0x25 PUSH6 0xBE6106A16D99 0xCE 0x4D CHAINID PUSH32 0xF59C7503F0A88AD564736F6C634300060B0033A2646970667358221220C37F2D 0xF 0xC1 MULMOD SGT 0xE7 0xED SWAP2 PUSH8 0xA97619B039BBE56 0xD4 0xD2 MLOAD CREATE2 0xEC 0xDB 0xB1 0x4B 0xEC SWAP14 0x22 SWAP10 0x28 PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "195876:3489:0:-:0;;;196367:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;196367:87:0;194226:5;194216:15;;-1:-1:-1;;194216:15:0;;;196414:7;:33;;-1:-1:-1;;;;;196414:33:0;;;-1:-1:-1;;;;;;196414:33:0;;;;;;;;;195876:3489;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {
                "contracts/core/pool/v1/PoolFactory.sol": {
                  "PoolLib": [
                    {
                      "length": 20,
                      "start": 4381
                    },
                    {
                      "length": 20,
                      "start": 9165
                    },
                    {
                      "length": 20,
                      "start": 9737
                    },
                    {
                      "length": 20,
                      "start": 10077
                    },
                    {
                      "length": 20,
                      "start": 11448
                    },
                    {
                      "length": 20,
                      "start": 11876
                    },
                    {
                      "length": 20,
                      "start": 13558
                    },
                    {
                      "length": 20,
                      "start": 14016
                    },
                    {
                      "length": 20,
                      "start": 14772
                    },
                    {
                      "length": 20,
                      "start": 15911
                    },
                    {
                      "length": 20,
                      "start": 17638
                    }
                  ]
                }
              },
              "object": "60806040523480156200001157600080fd5b5060043610620000e25760003560e01c8063945164e71162000099578063c3124525116200006f578063c3124525146200023a578063c5ba73ed1462000244578063cc2e0a26146200024e578063f3f616c0146200027757620000e2565b8063945164e714620001de5780639f71f14a14620001fa578063ac4afa38146200021a57620000e2565b8063312b898214620000e75780633f4ba83a14620001585780635b16ebb714620001645780635c975abb14620001a15780636050abb214620001ab5780638456cb5914620001d4575b600080fd5b6200013c600480360360e0811015620000ff57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c00135620002a8565b604080516001600160a01b039092168252519081900360200190f35b6200016262000a23565b005b6200018d600480360360208110156200017c57600080fd5b50356001600160a01b031662000a39565b604080519115158252519081900360200190f35b6200018d62000a4e565b6200018d60048036036020811015620001c357600080fd5b50356001600160a01b031662000a57565b6200016262000a6c565b620001e862000a80565b60408051918252519081900360200190f35b6200020462000a86565b6040805160ff9092168252519081900360200190f35b6200013c600480360360208110156200023257600080fd5b503562000a8b565b6200013c62000aa6565b6200020462000ab5565b62000162600480360360208110156200026657600080fd5b50356001600160a01b031662000aba565b62000162600480360360408110156200028f57600080fd5b506001600160a01b038135169060200135151562000ae6565b6000805460ff1615620002f5576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b620002ff62000b50565b600254604080516313d459fb60e01b81523060048201526001600160a01b038881166024830152600360448301529151919092169182916313d459fb91606480820192602092909190829003018186803b1580156200035d57600080fd5b505afa15801562000372573d6000803e3d6000fd5b505050506040513d60208110156200038957600080fd5b5051620003ce576040805162461bcd60e51b815260206004820152600e60248201526d28231d24a72b20a624a22fa6262360911b604482015290519081900360640190fd5b604080516313d459fb60e01b8152306004828101919091526001600160a01b038a8116602484015260448301919091529151918316916313d459fb91606480820192602092909190829003018186803b1580156200042b57600080fd5b505afa15801562000440573d6000803e3d6000fd5b505050506040513d60208110156200045757600080fd5b50516200049c576040805162461bcd60e51b815260206004820152600e60248201526d28231d24a72b20a624a22fa9a62360911b604482015290519081900360640190fd5b60408051631b971aa360e11b815233600482015290516001600160a01b0383169163372e3546916024808301926020929190829003018186803b158015620004e357600080fd5b505afa158015620004f8573d6000803e3d6000fd5b505050506040513d60208110156200050f57600080fd5b505162000555576040805162461bcd60e51b815260206004820152600f60248201526e50463a4e4f545f44454c454741544560881b604482015290519081900360640190fd5b5060606040518060400160405280601081526020016f26b0b83632902837b7b6102a37b5b2b760811b815250905060606040518060400160405280600681526020016504d504c2d4c560d41b81525090506000338b8b8b8b8b8b8b8a8a604051620005c09062000eed565b6001600160a01b03808c1682528a81166020808401919091528a821660408401528982166060840152908816608083015260a0820187905260c0820186905260e0820185905261014061010083018181528551918401919091528451909161012084019161016085019187019080838360005b838110156200064d57818101518382015260200162000633565b50505050905090810190601f1680156200067b5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620006b057818101518382015260200162000696565b50505050905090810190601f168015620006de5780820380516001836020036101000a031916815260200191505b509c50505050505050505050505050604051809103906000f0801580156200070a573d6000803e3d6000fd5b5090508093508360036000600154815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160046000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000815460010191905081905550336001600160a01b0316846001600160a01b03167fca6c57d58de1ff84c629ea4a44b3a2f19a6c83cc1dc3cd7d1ede2067a6a1016d8d8d856001600160a01b0316639759164a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200080957600080fd5b505afa1580156200081e573d6000803e3d6000fd5b505050506040513d60208110156200083557600080fd5b5051604080516233b1cf60e41b815290516001600160a01b0389169163033b1cf0916004808301926020929190829003018186803b1580156200087757600080fd5b505afa1580156200088c573d6000803e3d6000fd5b505050506040513d6020811015620008a357600080fd5b81019080805190602001909291905050508d8d8d8c8c604051808a6001600160a01b03166001600160a01b03168152602001896001600160a01b03166001600160a01b03168152602001886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b031681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156200096e57818101518382015260200162000954565b50505050905090810190601f1680156200099c5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620009d1578181015183820152602001620009b7565b50505050905090810190601f168015620009ff5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a3505050979650505050505050565b62000a2d62000c12565b62000a3762000cfd565b565b60046020526000908152604090205460ff1681565b60005460ff1690565b60056020526000908152604090205460ff1681565b62000a7662000c12565b62000a3762000d9e565b60015481565b600481565b6003602052600090815260409020546001600160a01b031681565b6002546001600160a01b031681565b600381565b62000ac462000e22565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b62000af062000e22565b6001600160a01b038216600081815260056020908152604091829020805460ff1916851515908117909155825190815291517fc0d8ae32722eafe08b35b2bb46dec31dcbbd5bb18069f66995df3c9f47f4d64f9281900390910190a25050565b600260009054906101000a90046001600160a01b03166001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b9f57600080fd5b505afa15801562000bb4573d6000803e3d6000fd5b505050506040513d602081101562000bcb57600080fd5b50511562000a37576040805162461bcd60e51b815260206004820152600f60248201526e14118e941493d513d7d4105554d151608a1b604482015290519081900360640190fd5b600260009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c6157600080fd5b505afa15801562000c76573d6000803e3d6000fd5b505050506040513d602081101562000c8d57600080fd5b50516001600160a01b031633148062000cb557503360009081526005602052604090205460ff165b62000a37576040805162461bcd60e51b815260206004820152601360248201527228231d2727aa2fa3a7ab2fa7a92fa0a226a4a760691b604482015290519081900360640190fd5b60005460ff1662000d4c576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa62000d8162000ee9565b604080516001600160a01b039092168252519081900360200190a1565b60005460ff161562000dea576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25862000d8162000ee9565b600260009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e7157600080fd5b505afa15801562000e86573d6000803e3d6000fd5b505050506040513d602081101562000e9d57600080fd5b50516001600160a01b0316331462000a37576040805162461bcd60e51b815260206004820152600a60248201526928231d2727aa2fa3a7ab60b11b604482015290519081900360640190fd5b3390565b6150438062000efc8339019056fe6101806040523480156200001257600080fd5b50604051620050433803806200504383398181016040526101408110156200003957600080fd5b815160208301516040808501516060860151608087015160a088015160c089015160e08a01516101008b0180519751999b989a969995989497939692959194919392820192846401000000008211156200009257600080fd5b908301906020820185811115620000a857600080fd5b8251640100000000811182820188101715620000c357600080fd5b82525081516020918201929091019080838360005b83811015620000f2578181015183820152602001620000d8565b50505050905090810190601f168015620001205780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200014457600080fd5b9083019060208201858111156200015a57600080fd5b82516401000000008111828201881017156200017557600080fd5b82525081516020918201929091019080838360005b83811015620001a45781810151838201526020016200018a565b50505050905090810190601f168015620001d25780820380516001836020036101000a031916815260200191505b5060405250505081818181818181818160039080519060200190620001f99291906200056e565b5080516200020f9060049060208401906200056e565b50506005805460ff191660121790555073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__955063149851689450620002589350339250506001600160e01b03620004fe169050565b604080516001600160e01b031960e085901b1681526001600160a01b039283166004820152828e166024820152918c16604483015260648201899052608482018890525160a4808301926000929190829003018186803b158015620002bc57600080fd5b505af4158015620002d1573d6000803e3d6000fd5b50505050886001600160a01b03166080816001600160a01b031660601b81525050886001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032c57600080fd5b505afa15801562000341573d6000803e3d6000fd5b505050506040513d60208110156200035857600080fd5b505160ff1661014052606088811b6001600160601b031990811660e0528b821b1660a052601086905561016085905233901b610120526012839055604080516342ef033f60e11b81526001600160a01b03808b1660048301528b811660248301529151918916916385de067e916044808201926020929091908290030181600087803b158015620003e857600080fd5b505af1158015620003fd573d6000803e3d6000fd5b505050506040513d60208110156200041457600080fd5b505160601b6001600160601b0319166101005260408051630cf5bc1d60e11b81526001600160a01b038b811660048301529151918816916319eb783a916024808201926020929091908290030181600087803b1580156200047457600080fd5b505af115801562000489573d6000803e3d6000fd5b505050506040513d6020811015620004a057600080fd5b505160601b6001600160601b03191660c05262ed4e00601355604080516000815290517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a916020908290030190a15050505050505050505062000613565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156200053a57600080fd5b505afa1580156200054f573d6000803e3d6000fd5b505050506040513d60208110156200056657600080fd5b505192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005b157805160ff1916838001178555620005e1565b82800160010185558215620005e1579182015b82811115620005e1578251825591602001919060010190620005c4565b50620005ef929150620005f3565b5090565b6200061091905b80821115620005ef5760008155600101620005fa565b90565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c61014051610160516148fd62000746600039806111395280611c695280612644525080613397525080610d5f5280610da85280610f5f52806119ae5280611ed152806123b15280612c755280613020525080610c875280610e6b528061127752806112f2528061139f52806114195280612e45525080610df3528061225f5280612e6d525080610f8752806112a1528061251052806127285280612c0c5280612f7552806132ac5280613805525080610e43528061124d5280611b4c5280612d4b5280613b28525080610e1b5280611027528061137552806113ea5280611efa528061238d52806127055280612be25280612dd95280612e1d5280612f5352806137d652506148fd6000f3fe608060405234801561001057600080fd5b50600436106103fb5760003560e01c806370a0823111610215578063a9059cbb11610125578063c771c390116100b8578063d82745c811610087578063d82745c814610bfa578063dd62ed3e14610c20578063ee947a7c14610c4e578063eff9884314610c56578063fec984e314610c5e576103fb565b8063c771c39014610b79578063c965b54814610b96578063cc0fef0214610bc4578063d7bd3c9114610bcc576103fb565b8063b69410de116100f4578063b69410de14610acf578063b6b55f2514610ad7578063c374682514610af4578063c59e395914610b53576103fb565b8063a9059cbb14610a4f578063ac64165514610a7b578063aed4966a14610a83578063af6d557114610aa9576103fb565b806384b76824116101a85780639759164a116101775780639759164a146109ec5780639f3c7325146109f4578063a33142f7146109fc578063a43baa3d14610a04578063a457c2d714610a23576103fb565b806384b76824146109885780638905fd4f146109905780639185192a146109b657806395d89b41146109e4576103fb565b806376687d3d116101e457806376687d3d1461093e5780637b99adb11461094657806380cd916d1461096357806380e7ce851461096b576103fb565b806370a08231146108da57806371073bac1461090057806373ef9a50146109085780637666f12514610910576103fb565b80632e1a7d4d1161031057806346c162de116102a357806351b42b001161027257806351b42b001461081c578063613384f214610824578063641ad8a91461084a5780636696779114610876578063681cb10a1461089c576103fb565b806346c162de146107de5780634bb278f3146107e65780634e97415f146107ee5780634f85221a14610814576103fb565b806340504ba0116102df57806340504ba01461074757806340bde09814610775578063410dbf7e1461079b578063443bb293146107b8576103fb565b80632e1a7d4d146106ee578063313ce5671461070b57806339509351146107135780634046af2b1461073f576103fb565b80631831ccf21161039357806323b872dd1161036257806323b872dd1461062857806324600fc31461065e57806324b92e8e1461066657806327f918561461068c5780632ac04ac8146106b8576103fb565b80631831ccf21461057a5780631aa37cec14610582578063209b2bca146105ba57806321c0b342146105c2576103fb565b80630d49b38c116103cf5780630d49b38c1461051957806313bf9e7e14610521578063174a5be41461055457806318160ddd14610572576103fb565b806241c52c14610400578063033b1cf01461043857806306fdde031461045c578063095ea7b3146104d9575b600080fd5b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610c66565b60408051918252519081900360200190f35b610440610c85565b604080516001600160a01b039092168252519081900360200190f35b610464610ca9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561049e578181015183820152602001610486565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610505600480360360408110156104ef57600080fd5b506001600160a01b038135169060200135610d3f565b604080519115158252519081900360200190f35b610440610d5d565b610529610d81565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b61055c610f04565b6040805160ff9092168252519081900360200190f35b610426610f09565b610505610f0f565b6105b86004803603606081101561059857600080fd5b506001600160a01b03813581169160208101359091169060400135610f18565b005b610440611025565b6105f0600480360360408110156105d857600080fd5b506001600160a01b0381358116916020013516611049565b604051808260e080838360005b838110156106155781810151838201526020016105fd565b5050505090500191505060405180910390f35b6105056004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611525565b6105b86115b3565b6104266004803603602081101561067c57600080fd5b50356001600160a01b0316611607565b6105b8600480360360408110156106a257600080fd5b506001600160a01b038135169060200135611619565b6105b8600480360360608110156106ce57600080fd5b506001600160a01b038135811691602081013590911690604001356117ba565b6105b86004803603602081101561070457600080fd5b5035611991565b61055c611aed565b6105056004803603604081101561072957600080fd5b506001600160a01b038135169060200135611af6565b610440611b4a565b6105b86004803603604081101561075d57600080fd5b506001600160a01b0381358116916020013516611b6e565b6104266004803603602081101561078b57600080fd5b50356001600160a01b0316611bef565b6105b8600480360360208110156107b157600080fd5b5035611c58565b610426600480360360208110156107ce57600080fd5b50356001600160a01b0316611d0d565b6105b8611d3f565b6105b8611d6d565b6104266004803603602081101561080457600080fd5b50356001600160a01b0316611e3b565b610505611e80565b6105b8611ea0565b6105056004803603602081101561083a57600080fd5b50356001600160a01b0316611ff9565b61085261200e565b6040518082600281111561086257fe5b60ff16815260200191505060405180910390f35b6104266004803603602081101561088c57600080fd5b50356001600160a01b031661201c565b610426600480360360808110156108b257600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612042565b610426600480360360208110156108f057600080fd5b50356001600160a01b03166120ed565b610426612108565b6105b861210e565b6105b86004803603604081101561092657600080fd5b506001600160a01b03813516906020013515156121a4565b61042661220c565b6105b86004803603602081101561095c57600080fd5b5035612212565b61044061225d565b6105056004803603602081101561098157600080fd5b5035612281565b6105b86122d4565b6105b8600480360360208110156109a657600080fd5b50356001600160a01b0316612370565b6105b8600480360360408110156109cc57600080fd5b506001600160a01b0381351690602001351515612445565b6104646124ad565b61044061250e565b610426612532565b610426612538565b6105b860048036036020811015610a1a57600080fd5b5035151561253e565b61050560048036036040811015610a3957600080fd5b506001600160a01b03813516906020013561258d565b61050560048036036040811015610a6557600080fd5b506001600160a01b0381351690602001356125fb565b61042661260f565b61042660048036036020811015610a9957600080fd5b50356001600160a01b0316612615565b61042660048036036020811015610abf57600080fd5b50356001600160a01b0316612630565b610426612642565b6105b860048036036020811015610aed57600080fd5b5035612666565b610b3a600480360360a0811015610b0a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356127a0565b6040805192835260208301919091528051918290030190f35b61050560048036036020811015610b6957600080fd5b50356001600160a01b031661285d565b6105b860048036036020811015610b8f57600080fd5b5035612872565b61042660048036036040811015610bac57600080fd5b506001600160a01b03813581169160200135166128fa565b6105b8612917565b61044060048036036040811015610be257600080fd5b506001600160a01b0381358116916020013516612942565b61042660048036036020811015610c1057600080fd5b50356001600160a01b0316612968565b61042660048036036040811015610c3657600080fd5b506001600160a01b038135811691602001351661297a565b6104266129a5565b6104266129ab565b6104266129b1565b6001600160a01b0381166000908152600860205260409020545b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b820191906000526020600020905b815481529060010190602001808311610d1857829003601f168201915b5050505050905090565b6000610d53610d4c6129b7565b84846129bb565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63767f5038610dcc7f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6040805160e084901b6001600160e01b03191681526001600160a01b0392831660048201527f0000000000000000000000000000000000000000000000000000000000000000831660248201527f0000000000000000000000000000000000000000000000000000000000000000831660448201527f0000000000000000000000000000000000000000000000000000000000000000831660648201527f000000000000000000000000000000000000000000000000000000000000000090921660848301525160a48083019260a0929190829003018186803b158015610eb257600080fd5b505af4158015610ec6573d6000803e3d6000fd5b505050506040513d60a0811015610edc57600080fd5b5080516020820151604083015160608401516080909401519299919850965091945092509050565b600181565b60025490565b60145460ff1681565b610f20612b14565b610f2a6001612b24565b601154610f3d908263ffffffff612b8616565b6011556040805163fbecb17160e01b8152601660048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528416608482015260a48101839052905173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163fbecb1719160c4808301926000929190829003018186803b15801561100057600080fd5b505af4158015611014573d6000803e3d6000fd5b50505050611020612be0565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110516146af565b611059612c70565b611061612d40565b6001600160a01b0380841660009081526016602090815260408083208685168452909152808220548151634e71d92d60e01b81529151931692634e71d92d9260048084019360e093929083900390910190829087803b1580156110c357600080fd5b505af11580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156110fc57600080fd5b50601054604051633faa6c5d60e01b815291925060009182918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91633faa6c5d9188917f00000000000000000000000000000000000000000000000000000000000000009190600401808460e08083838c5b8381101561117e578181015183820152602001611166565b50505050905001838152602001828152602001935050505060806040518083038186803b1580156111ae57600080fd5b505af41580156111c2573d6000803e3d6000fd5b505050506040513d60808110156111d857600080fd5b50805160208201516040830151606090930151601154929750909550919350909150821161120e57601180548390039055611232565b601154611224908290840363ffffffff612b8616565b601180546000909155925090505b600c54611245908263ffffffff612b8616565b600c556112727f000000000000000000000000000000000000000000000000000000000000000085612dcc565b61129c7f000000000000000000000000000000000000000000000000000000000000000084612dcc565b6112d57f00000000000000000000000000000000000000000000000000000000000000006112d0848463ffffffff612b8616565b612dcc565b60c0850151156112f0576112f0878660066020020151612e06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166346c162de6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561134b57600080fd5b505af115801561135f573d6000803e3d6000fd5b5050505061136b611d3f565b611373612be0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147e57600080fd5b505afa158015611492573d6000803e3d6000fd5b505050506040513d60208110156114a857600080fd5b505160408051918252519081900360200190a36060808601516040805184815260208101869052808201929092529181018590526080810186905290516001600160a01b038916917f21280d282ce6aa29c649fd1825373d7c77892fac3f1958fd98d5ca52dd82a197919081900360a00190a25050505092915050565b6000611532848484613010565b6115a88461153e6129b7565b6115a3856040518060600160405280602881526020016147c3602891396001600160a01b038a1660009081526001602052604081209061157c6129b7565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61318e16565b6129bb565b5060015b9392505050565b6115bb612c70565b60006115c5613225565b9050806115d25750611605565b6115dc33826132aa565b6115e4612be0565b600c546115f7908263ffffffff61332a16565b600c5561160261336c565b50505b565b60156020526000908152604090205481565b336000908152601a602090815260408083206001600160a01b03861684529091528120549061164e828463ffffffff612b8616565b336000908152601b602052604081205491925090611672908563ffffffff612b8616565b905073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63297e7bf786868461169a336120ed565b6040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b0316815260200184815260200183815260200182815260200194505050505060006040518083038186803b1580156116f557600080fd5b505af4158015611709573d6000803e3d6000fd5b5050336000818152601a602090815260408083206001600160a01b038c16808552908352818420899055848452601b835292819020879055805189815291820188905280519295509293507f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e892908290030190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a25050505050565b6001600160a01b0383166000908152601a60209081526040808320338452909152812054906117ef828463ffffffff61332a16565b60408051631b4c903160e01b81526001600160a01b0380891660048301528716602482015260448101869052905191925073__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91631b4c903191606480820192600092909190829003018186803b15801561185c57600080fd5b505af4158015611870573d6000803e3d6000fd5b505050506001600160a01b0385166000818152601a602090815260408083203384528252808320859055928252601b9052908120546118af908561332a565b6001600160a01b038088166000818152601b60209081526040918290208590558151898152915194955092891693919233927ffaa022ea2cd7f14157070896fabadafe96cc4d4714eef7ae6a992a5084493ed59281900390910190a46040805184815260208101849052815133926001600160a01b038a16927f847e03d69a7075471d42285f4ac63570c10f3012d8bf736d66de2eef17aac3e8929081900390910190a360408051828152905133917fe7f3fb4dacbff434e6d283d891f199c48b05b1629f610bd7ddc62353e162fb16919081900360200190a2505050505050565b611999612c70565b60006119a482613390565b90506000806119d27f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d6040811015611a3357600080fd5b5080516020909101519092509050611a4b33846133dd565b3360009081526019602052604090205482014203811015611aac576040805162461bcd60e51b8152602060048201526016602482015275140e95d2551211149055d7d393d517d0531313d5d15160521b604482015290519081900360640190fd5b611ab633846134bc565b611abe6115b3565b611adf33611ada611acd613563565b879063ffffffff61332a16565b6132aa565b611ae7612be0565b50505050565b60055460ff1690565b6000610d53611b036129b7565b846115a38560016000611b146129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff612b8616565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b76612b14565b6001600160a01b038083166000908152601660209081526040808320858516845290915280822054815163175f832960e01b8152915193169263175f83299260048084019391929182900301818387803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90611c4a90611c4590611c39611c34611c25886120ed565b6009549063ffffffff61359216565b6135eb565b9063ffffffff61362c16565b613691565b81611c5157fe5b0492915050565b611c60612b14565b612710611c93827f000000000000000000000000000000000000000000000000000000000000000063ffffffff612b8616565b1115611cd2576040805162461bcd60e51b8152602060048201526009602482015268503a4241445f46454560b81b604482015290519081900360640190fd5b60108190556040805182815290517f9408bb8c08d29b335e36090045074610352365476d9df02e203c25db4fcd67c09181900360200190a150565b6001600160a01b038116600090815260086020526040812054610d5790611d3384611e3b565b9063ffffffff61332a16565b6000611d4961336c565b905060008113611d595750611605565b611d6a611d6582613691565b6136d2565b50565b611d75612b14565b611d7f6000612b24565b6000611d89610d81565b50509250505080611dd1576040805162461bcd60e51b815260206004820152600d60248201526c503a494e5355465f5354414b4560981b604482015290519081900360640190fd5b601480546001919061ff0019166101008302179055506014546040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a91610100900460ff169080826002811115611e2557fe5b60ff16815260200191505060405180910390a150565b6001600160a01b038116600090815260076020526040812054600160801b90611c4a90611c4590611c39611c34611e71886120ed565b6006549063ffffffff61359216565b60006001601454610100900460ff166002811115611e9a57fe5b14905090565b611ea8612b14565b611eb26001612b24565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63abbedb40611ef57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6011547f00000000000000000000000000000000000000000000000000000000000000006040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001838152602001826001600160a01b03166001600160a01b03168152602001935050505060006040518083038186803b158015611f7f57600080fd5b505af4158015611f93573d6000803e3d6000fd5b50506014805461ff00191661020017908190556040517f24b0afb747a8213aea796b9518bfa667de187b83390eda7cc93b8e57f80fcd1a935061010090910460ff16915080826002811115611fe457fe5b60ff16815260200191505060405180910390a1565b60176020526000908152604090205460ff1681565b601454610100900460ff1681565b6001600160a01b0381166000908152600b6020526040812054610d5790611d3384611bef565b6040805163340e588560e11b81526001600160a01b0380871660048301528086166024830152808516604483015283166064820152905160009173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9163681cb10a91608480820192602092909190829003018186803b1580156120b857600080fd5b505af41580156120cc573d6000803e3d6000fd5b505050506040513d60208110156120e257600080fd5b505195945050505050565b6001600160a01b031660009081526020819052604090205490565b600c5481565b6000612119336120ed565b1415612159576040805162461bcd60e51b815260206004820152600a602482015269140e96915493d7d0905360b21b604482015290519081900360640190fd5b336000818152601960209081526040918290204290819055825190815291517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b6121ac612b14565b6001600160a01b038216600081815260186020908152604091829020805460ff1916851515908117909155825190815291517fdf56132520665b33cd5731c5cfbacd8bee82524e67df563bb25b2be304f91d449281900390910190a25050565b60125481565b61221a612c70565b612222612d40565b60128190556040805182815290517f3ff20538222f568f27ff436c0c49dfd3e48d5b8f86533a3f759dc1c7089775ab9181900360200190a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60145460009060ff16806122a457503360009081526018602052604090205460ff165b8015610d5757506012546122cc836122c06011546122c06137d2565b9063ffffffff612b8616565b111592915050565b33600090815260196020526040902054612329576040805162461bcd60e51b8152602060048201526011602482015270503a4e4f545f5749544844524157494e4760781b604482015290519081900360640190fd5b3360008181526019602090815260408083208390558051928352517f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d659281900390910190a2565b73__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__63a89d5ddb827f00000000000000000000000000000000000000000000000000000000000000006123d57f0000000000000000000000000000000000000000000000000000000000000000612aa7565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292841660248401529216604482015290516064808301926000929190829003018186803b15801561242a57600080fd5b505af415801561243e573d6000803e3d6000fd5b5050505050565b61244d612b14565b6001600160a01b038216600081815260176020908152604091829020805460ff1916851515908117909155825190815291517f353578bbc0ab907b7018b0f7b50b5f822d31dc9fcf4c16fffa780e109ca7c9309281900390910190a25050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d355780601f10610d0a57610100808354040283529160200191610d35565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b600d5481565b612546612b14565b6014805482151560ff19909116811790915560408051918252517feeba6fd794e30165023f7e3d017e92901622076a95d36e45906955e025ff4fe79181900360200190a150565b6000610d5361259a6129b7565b846115a3856040518060600160405280602581526020016148a360259139600160006125c46129b7565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61318e16565b6000610d536126086129b7565b8484613010565b60115481565b6001600160a01b03166000908152600b602052604090205490565b601b6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61266e612c70565b6126786001612b24565b61268181612281565b6126c6576040805162461bcd60e51b8152602060048201526011602482015270140e91115417d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b3360009081526019602052604081208190556126e182613390565b90506126f860156126f1336120ed565b833361389b565b6127536001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008563ffffffff61395416565b61275d33826139ae565b612765612be0565b6040805160008152905133917f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d65919081900360200190a25050565b6040805163c374682560e01b81526001600160a01b0380881660048301528087166024830152808616604483015284166064820152608481018390528151600092839273__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__9263c37468259260a480840193919291829003018186803b15801561281c57600080fd5b505af4158015612830573d6000803e3d6000fd5b505050506040513d604081101561284657600080fd5b508051602090910151909890975095505050505050565b60186020526000908152604090205460ff1681565b61287a612b14565b6013548111156128bf576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f56414c554560a81b604482015290519081900360640190fd5b60138190556040805182815290517f3094b4ce0463766c3cd81ed2ae2451610dcac39a1061fa023ca9d3d4df959f759181900360200190a150565b601a60209081526000928352604080842090915290825290205481565b60006129216139fa565b9050600081136129315750611605565b611d6a61293d82613691565b613a18565b60166020908152600092835260408084209091529082529020546001600160a01b031681565b60196020526000908152604090205481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60135481565b60105481565b600f5481565b3390565b6001600160a01b038316612a005760405162461bcd60e51b81526004018080602001828103825260248152602001806148316024913960400191505060405180910390fd5b6001600160a01b038216612a455760405162461bcd60e51b81526004018080602001828103825260228152602001806147136022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000816001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae257600080fd5b505afa158015612af6573d6000803e3d6000fd5b505050506040513d6020811015612b0c57600080fd5b505192915050565b612b1c613b1d565b611605612c70565b806002811115612b3057fe5b601454610100900460ff166002811115612b4657fe5b14611d6a576040805162461bcd60e51b815260206004820152600b60248201526a503a4241445f535441544560a81b604482015290519081900360640190fd5b6000828201838110156115ac576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f2047d1633ff7768462ae07d28cb16e484203bfd6d85ce832494270ebcd9081a2612c5d6137d2565b60408051918252519081900360200190a3565b612c997f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b031663425fad586040518163ffffffff1660e01b815260040160206040518083038186803b158015612cd157600080fd5b505afa158015612ce5573d6000803e3d6000fd5b505050506040513d6020811015612cfb57600080fd5b505115611605576040805162461bcd60e51b815260206004820152600e60248201526d140e941493d513d7d4105554d15160921b604482015290519081900360640190fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612d8657503360009081526017602052604090205460ff165b611605576040805162461bcd60e51b8152602060048201526012602482015271281d2727aa2fa222a62fa7a92fa0a226a4a760711b604482015290519081900360640190fd5b6116026001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838363ffffffff613b8616565b6040805162715b0960e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000001660448201526064810183905290516000918291829173__$bba9eab10d2fae7e2b4dac353c8ed79fb1$__91630715b09091608480820192606092909190829003018186803b158015612ede57600080fd5b505af4158015612ef2573d6000803e3d6000fd5b505050506040513d6060811015612f0857600080fd5b5080516020820151604090920151909450909250905080841115612f4657600d54612f3b9082860363ffffffff612b8616565b600d55612f46612917565b612fa06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008363ffffffff613b8616565b601154612fb3908563ffffffff61332a16565b60115560408051858152602081018590528082018490526060810183905290516001600160a01b038716917fd393d18014c1898545668c52621bced9493753be5b8138f2539542ca606732eb919081900360800190a25050505050565b613018612c70565b6000806130447f0000000000000000000000000000000000000000000000000000000000000000612aa7565b6001600160a01b0316639f51290b6040518163ffffffff1660e01b8152600401604080518083038186803b15801561307b57600080fd5b505afa15801561308f573d6000803e3d6000fd5b505050506040513d60408110156130a557600080fd5b50805160209091015190925090506130bd85846133dd565b6001600160a01b038416600090815260196020526040902054820181014211613120576040805162461bcd60e51b815260206004820152601060248201526f140e9513d7d393d517d0531313d5d15160821b604482015290519081900360640190fd5b600061312b8661201c565b1461316e576040805162461bcd60e51b815260206004820152600e60248201526d503a5245434f475f4c4f5353455360901b604482015290519081900360640190fd5b613183601561317c866120ed565b858761389b565b61243e858585613bd8565b6000818484111561321d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131e25781810151838201526020016131ca565b50505050905090810190601f16801561320f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061323033611d0d565b3360009081526008602052604081205491925090613254908363ffffffff612b8616565b336000818152600860209081526040918290208490558151868152908101849052815193945091927ffbc3a599b784fe88772fc5abcc07223f64ca0b13acc341f4fb1e46bef0510eb49281900390910190a25090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611bd357600080fd5b60006115ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061318e565b600e8054600c549182905560009161338a908263ffffffff613d0416565b91505090565b6000610d577f0000000000000000000000000000000000000000000000000000000000000000600a0a6133d184670de0b6b3a764000063ffffffff61359216565b9063ffffffff613d6916565b6013546001600160a01b038316600090815260156020526040902054429161340b919063ffffffff612b8616565b111561344f576040805162461bcd60e51b815260206004820152600e60248201526d140e9195539114d7d313d0d2d15160921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205461347582611d33856120ed565b1015611602576040805162461bcd60e51b8152602060048201526011602482015270140e925394d55197d514905394d7d09053607a1b604482015290519081900360640190fd5b6134c68282613dab565b60006135086134e3611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600a60209081526040918290208490558151848152915193945091927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a2505050565b600061356d613e52565b600d54909150613583908263ffffffff61332a16565b600d5561358e6139fa565b5090565b6000826135a157506000610d57565b828202828482816135ae57fe5b04146115ac5760405162461bcd60e51b81526004018080602001828103825260218152602001806147a26021913960400191505060405180910390fd5b806000811215610c80576040805162461bcd60e51b815260206004820152600760248201526629a6aa9d27a7a160c91b604482015290519081900360640190fd5b60008282018183128015906136415750838112155b80613656575060008312801561365657508381125b6115ac5760405162461bcd60e51b815260040180806020018281038252602181526020018061475b6021913960400191505060405180910390fd5b60008082121561358e576040805162461bcd60e51b8152602060048201526007602482015266534d493a4e454760c81b604482015290519081900360640190fd5b60006136dc610f09565b11613720576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b8061372a57611d6a565b613761613735610f09565b61374983600160801b63ffffffff61359216565b8161375057fe5b60065491900463ffffffff612b8616565b60065560408051828152905133917f26536799ace2c3dbe12e638ec3ade6b4173dcf1289be0a58d51a5003015649bd919081900360200190a260065460408051918252517f1f8d7705f31c3337a080803a8ad7e71946fb88d84738879be2bf402f97156e969181900360200190a150565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561386a57600080fd5b505afa15801561387e573d6000803e3d6000fd5b505050506040513d602081101561389457600080fd5b5051905090565b6001600160a01b038116600090815260208590526040812054908484016138c257816138f8565b6138f86138eb8686016133d1876138df428863ffffffff61332a16565b9063ffffffff61359216565b839063ffffffff612b8616565b6001600160a01b038416600081815260208981526040918290208490558151848152915193945091927ff9b842c70d79466435b46540bb988aa5c998b3243bf91c36380ddb5887c0f0e4929181900390910190a2505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ae7908590613ed7565b6139b88282613f88565b60006135086139d5611c348460095461359290919063ffffffff16565b6001600160a01b0385166000908152600a60205260409020549063ffffffff613d0416565b600f8054600d549182905560009161338a908263ffffffff613d0416565b6000613a22610f09565b11613a66576040805162461bcd60e51b815260206004820152600f60248201526e4644543a5a45524f5f535550504c5960881b604482015290519081900360640190fd5b80613a7057611d6a565b6000613aa9613a7d610f09565b613a9184600160801b63ffffffff61359216565b81613a9857fe5b60095491900463ffffffff612b8616565b600981905560408051848152905191925033917ff88156a8032a0d2c65df18fafaf84e0bea647b3d94a0f7fc6ab14c97dec2bf749181900360200190a26040805182815290517f240ce2b5ce9e9e5a70010c7f8034c233d89b7ce2d60f3a38d9bc3ca01a36f88c9181900360200190a15050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611605576040805162461bcd60e51b8152602060048201526009602482015268140e9393d517d1115360ba1b604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611020908490613ed7565b613be3838383613fd4565b6000613bfd611c348360095461359290919063ffffffff16565b6001600160a01b0385166000908152600a602052604081205491925090613c2a908363ffffffff61362c16565b6001600160a01b038087166000908152600a602052604080822084905591871681529081205491925090613c64908463ffffffff613d0416565b6001600160a01b038087166000908152600a602090815260409182902084905581518681529151939450918916927fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3929181900390910190a26040805182815290516001600160a01b038716917fb464de3159e090617503d0166bff9ffeecdefd42cd9dbb49f918df95a80fdea3919081900360200190a2505050505050565b6000818303818312801590613d195750838113155b80613d2e5750600083128015613d2e57508381135b6115ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806148556024913960400191505060405180910390fd5b60006115ac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614100565b613db58282614165565b6000613df7613dd2611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff61362c16565b6001600160a01b0384166000818152600760209081526040918290208490558151848152915193945091927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a2505050565b6000613e5d3361201c565b336000908152600b602052604081205491925090613e81908363ffffffff612b8616565b336000818152600b60209081526040918290208490558151868152908101849052815193945091927f814eba35782909dbbaeefb8104073dfca45de43173f7077970c1584b3cf918b59281900390910190a25090565b6060613f2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661426d9092919063ffffffff16565b80519091501561102057808060200190516020811015613f4b57600080fd5b50516110205760405162461bcd60e51b815260040180806020018281038252602a815260200180614879602a913960400191505060405180910390fd5b613f928282614284565b6000613df7613faf611c348460065461359290919063ffffffff16565b6001600160a01b0385166000908152600760205260409020549063ffffffff613d0416565b613fdf838383614380565b6000613ff9611c348360065461359290919063ffffffff16565b6001600160a01b03851660009081526007602052604081205491925090614026908363ffffffff61362c16565b6001600160a01b0380871660009081526007602052604080822084905591871681529081205491925090614060908463ffffffff613d0416565b6001600160a01b0380871660009081526007602090815260409182902084905581518681529151939450918916927ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773929181900390910190a26040805182815290516001600160a01b038716917ff694bebd33ada288ae2f4485315db76739e2d5501daf315e71c9d8f841aa7773919081900360200190a2505050505050565b6000818361414f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131e25781810151838201526020016131ca565b50600083858161415b57fe5b0495945050505050565b6001600160a01b0382166141aa5760405162461bcd60e51b81526004018080602001828103825260218152602001806147eb6021913960400191505060405180910390fd5b6141b682600083611020565b6141f9816040518060600160405280602281526020016146f1602291396001600160a01b038516600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b038316600090815260208190526040902055600254614225908263ffffffff61332a16565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b606061427c84846000856144e7565b949350505050565b6001600160a01b0382166142df576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6142eb60008383611020565b6002546142fe908263ffffffff612b8616565b6002556001600160a01b03821660009081526020819052604090205461432a908263ffffffff612b8616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0383166143c55760405162461bcd60e51b815260040180806020018281038252602581526020018061480c6025913960400191505060405180910390fd5b6001600160a01b03821661440a5760405162461bcd60e51b81526004018080602001828103825260238152602001806146ce6023913960400191505060405180910390fd5b614415838383611020565b61445881604051806060016040528060268152602001614735602691396001600160a01b038616600090815260208190526040902054919063ffffffff61318e16565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461448d908263ffffffff612b8616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6060824710156145285760405162461bcd60e51b815260040180806020018281038252602681526020018061477c6026913960400191505060405180910390fd5b61453185614643565b614582576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106145c15780518252601f1990920191602091820191016145a2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614623576040519150601f19603f3d011682016040523d82523d6000602084013e614628565b606091505b5091509150614638828286614649565b979650505050505050565b3b151590565b606083156146585750816115ac565b8251156146685782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156131e25781810151838201526020016131ca565b6040518060e00160405280600790602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec572c132b8c22ad83f829932565be6106a16d99ce4d467ff59c7503f0a88ad564736f6c634300060b0033a2646970667358221220c37f2d0fc10913e7ed91670a97619b039bbe56d4d251f5ecdbb14bec9d22992864736f6c634300060b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH3 0xE2 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x945164E7 GT PUSH3 0x99 JUMPI DUP1 PUSH4 0xC3124525 GT PUSH3 0x6F JUMPI DUP1 PUSH4 0xC3124525 EQ PUSH3 0x23A JUMPI DUP1 PUSH4 0xC5BA73ED EQ PUSH3 0x244 JUMPI DUP1 PUSH4 0xCC2E0A26 EQ PUSH3 0x24E JUMPI DUP1 PUSH4 0xF3F616C0 EQ PUSH3 0x277 JUMPI PUSH3 0xE2 JUMP JUMPDEST DUP1 PUSH4 0x945164E7 EQ PUSH3 0x1DE JUMPI DUP1 PUSH4 0x9F71F14A EQ PUSH3 0x1FA JUMPI DUP1 PUSH4 0xAC4AFA38 EQ PUSH3 0x21A JUMPI PUSH3 0xE2 JUMP JUMPDEST DUP1 PUSH4 0x312B8982 EQ PUSH3 0xE7 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH3 0x158 JUMPI DUP1 PUSH4 0x5B16EBB7 EQ PUSH3 0x164 JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH3 0x1A1 JUMPI DUP1 PUSH4 0x6050ABB2 EQ PUSH3 0x1AB JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH3 0x1D4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH3 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH3 0x2A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x162 PUSH3 0xA23 JUMP JUMPDEST STOP JUMPDEST PUSH3 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xA39 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x18D PUSH3 0xA4E JUMP JUMPDEST PUSH3 0x18D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xA57 JUMP JUMPDEST PUSH3 0x162 PUSH3 0xA6C JUMP JUMPDEST PUSH3 0x1E8 PUSH3 0xA80 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x204 PUSH3 0xA86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH3 0x13C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH3 0xA8B JUMP JUMPDEST PUSH3 0x13C PUSH3 0xAA6 JUMP JUMPDEST PUSH3 0x204 PUSH3 0xAB5 JUMP JUMPDEST PUSH3 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xABA JUMP JUMPDEST PUSH3 0x162 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH3 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH3 0xAE6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0x2F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH3 0x2FF PUSH3 0xB50 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x3 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x35D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x372 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x389 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH3 0x3CE JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x28231D24A72B20A624A22FA62623 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 MLOAD SWAP2 DUP4 AND SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x440 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x457 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH3 0x49C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x28231D24A72B20A624A22FA9A623 PUSH1 0x91 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B971AA3 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x372E3546 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x4F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x50F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH3 0x555 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x50463A4E4F545F44454C4547415445 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x10 DUP2 MSTORE PUSH1 0x20 ADD PUSH16 0x26B0B83632902837B7B6102A37B5B2B7 PUSH1 0x81 SHL DUP2 MSTORE POP SWAP1 POP PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x6 DUP2 MSTORE PUSH1 0x20 ADD PUSH6 0x4D504C2D4C5 PUSH1 0xD4 SHL DUP2 MSTORE POP SWAP1 POP PUSH1 0x0 CALLER DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP12 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH3 0x5C0 SWAP1 PUSH3 0xEED JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND DUP3 MSTORE DUP11 DUP2 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP11 DUP3 AND PUSH1 0x40 DUP5 ADD MSTORE DUP10 DUP3 AND PUSH1 0x60 DUP5 ADD MSTORE SWAP1 DUP9 AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD DUP6 SWAP1 MSTORE PUSH2 0x140 PUSH2 0x100 DUP4 ADD DUP2 DUP2 MSTORE DUP6 MLOAD SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD SWAP1 SWAP2 PUSH2 0x120 DUP5 ADD SWAP2 PUSH2 0x160 DUP6 ADD SWAP2 DUP8 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x64D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x633 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x67B JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x6B0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x696 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x6DE JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH3 0x70A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP1 POP DUP1 SWAP4 POP DUP4 PUSH1 0x3 PUSH1 0x0 PUSH1 0x1 SLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x4 PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x0 DUP2 SLOAD PUSH1 0x1 ADD SWAP2 SWAP1 POP DUP2 SWAP1 SSTORE POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xCA6C57D58DE1FF84C629EA4A44B3A2F19A6C83CC1DC3CD7D1EDE2067A6A1016D DUP14 DUP14 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9759164A PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x81E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x835 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH3 0x33B1CF PUSH1 0xE4 SHL DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x33B1CF0 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x88C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x8A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP14 DUP14 DUP14 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x96E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x954 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x99C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP DUP4 DUP2 SUB DUP3 MSTORE DUP5 MLOAD DUP2 MSTORE DUP5 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 DUP7 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x9D1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9B7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x9FF JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH3 0xA2D PUSH3 0xC12 JUMP JUMPDEST PUSH3 0xA37 PUSH3 0xCFD JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH3 0xA76 PUSH3 0xC12 JUMP JUMPDEST PUSH3 0xA37 PUSH3 0xD9E JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 DUP2 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x3 DUP2 JUMP JUMPDEST PUSH3 0xAC4 PUSH3 0xE22 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH3 0xAF0 PUSH3 0xE22 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xC0D8AE32722EAFE08B35B2BB46DEC31DCBBD5BB18069F66995DF3C9F47F4D64F SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xB9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xBB4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xBCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH3 0xA37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x14118E941493D513D7D4105554D151 PUSH1 0x8A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xC61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xC76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xC8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ DUP1 PUSH3 0xCB5 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH3 0xA37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x28231D2727AA2FA3A7AB2FA7A92FA0A226A4A7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH3 0xD4C JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x14185D5CD8589B194E881B9BDD081C185D5CD959 PUSH1 0x62 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH3 0xD81 PUSH3 0xEE9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0xDEA JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x14185D5CD8589B194E881C185D5CD959 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH3 0xD81 PUSH3 0xEE9 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xE71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xE86 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0xE9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0xA37 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x28231D2727AA2FA3A7AB PUSH1 0xB1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH2 0x5043 DUP1 PUSH3 0xEFC DUP4 CODECOPY ADD SWAP1 JUMP INVALID PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5043 CODESIZE SUB DUP1 PUSH3 0x5043 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH2 0x140 DUP2 LT ISZERO PUSH3 0x39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD PUSH1 0xC0 DUP10 ADD MLOAD PUSH1 0xE0 DUP11 ADD MLOAD PUSH2 0x100 DUP12 ADD DUP1 MLOAD SWAP8 MLOAD SWAP10 SWAP12 SWAP9 SWAP11 SWAP7 SWAP10 SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP2 SWAP5 SWAP2 SWAP4 SWAP3 DUP3 ADD SWAP3 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0xA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0xC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xF2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xD8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x120 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x175 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1A4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x18A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x1D2 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP POP DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x1F9 SWAP3 SWAP2 SWAP1 PUSH3 0x56E JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x20F SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x56E JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH20 0x0 SWAP6 POP PUSH4 0x14985168 SWAP5 POP PUSH3 0x258 SWAP4 POP CALLER SWAP3 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x4FE AND SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP15 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP13 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP10 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP9 SWAP1 MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH3 0x2D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x32C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x341 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND PUSH2 0x140 MSTORE PUSH1 0x60 DUP9 DUP2 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0xE0 MSTORE DUP12 DUP3 SHL AND PUSH1 0xA0 MSTORE PUSH1 0x10 DUP7 SWAP1 SSTORE PUSH2 0x160 DUP6 SWAP1 MSTORE CALLER SWAP1 SHL PUSH2 0x120 MSTORE PUSH1 0x12 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x42EF033F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP12 AND PUSH1 0x4 DUP4 ADD MSTORE DUP12 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x85DE067E SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x3FD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x100 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xCF5BC1D PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP9 AND SWAP2 PUSH4 0x19EB783A SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x474 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x489 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0xC0 MSTORE PUSH3 0xED4E00 PUSH1 0x13 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH1 0x20 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG1 POP POP POP POP POP POP POP POP POP POP PUSH3 0x613 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x53A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x54F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x566 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x5B1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x5E1 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x5E1 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x5E1 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x5C4 JUMP JUMPDEST POP PUSH3 0x5EF SWAP3 SWAP2 POP PUSH3 0x5F3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x610 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x5EF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x5FA JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x48FD PUSH3 0x746 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1139 MSTORE DUP1 PUSH2 0x1C69 MSTORE DUP1 PUSH2 0x2644 MSTORE POP DUP1 PUSH2 0x3397 MSTORE POP DUP1 PUSH2 0xD5F MSTORE DUP1 PUSH2 0xDA8 MSTORE DUP1 PUSH2 0xF5F MSTORE DUP1 PUSH2 0x19AE MSTORE DUP1 PUSH2 0x1ED1 MSTORE DUP1 PUSH2 0x23B1 MSTORE DUP1 PUSH2 0x2C75 MSTORE DUP1 PUSH2 0x3020 MSTORE POP DUP1 PUSH2 0xC87 MSTORE DUP1 PUSH2 0xE6B MSTORE DUP1 PUSH2 0x1277 MSTORE DUP1 PUSH2 0x12F2 MSTORE DUP1 PUSH2 0x139F MSTORE DUP1 PUSH2 0x1419 MSTORE DUP1 PUSH2 0x2E45 MSTORE POP DUP1 PUSH2 0xDF3 MSTORE DUP1 PUSH2 0x225F MSTORE DUP1 PUSH2 0x2E6D MSTORE POP DUP1 PUSH2 0xF87 MSTORE DUP1 PUSH2 0x12A1 MSTORE DUP1 PUSH2 0x2510 MSTORE DUP1 PUSH2 0x2728 MSTORE DUP1 PUSH2 0x2C0C MSTORE DUP1 PUSH2 0x2F75 MSTORE DUP1 PUSH2 0x32AC MSTORE DUP1 PUSH2 0x3805 MSTORE POP DUP1 PUSH2 0xE43 MSTORE DUP1 PUSH2 0x124D MSTORE DUP1 PUSH2 0x1B4C MSTORE DUP1 PUSH2 0x2D4B MSTORE DUP1 PUSH2 0x3B28 MSTORE POP DUP1 PUSH2 0xE1B MSTORE DUP1 PUSH2 0x1027 MSTORE DUP1 PUSH2 0x1375 MSTORE DUP1 PUSH2 0x13EA MSTORE DUP1 PUSH2 0x1EFA MSTORE DUP1 PUSH2 0x238D MSTORE DUP1 PUSH2 0x2705 MSTORE DUP1 PUSH2 0x2BE2 MSTORE DUP1 PUSH2 0x2DD9 MSTORE DUP1 PUSH2 0x2E1D MSTORE DUP1 PUSH2 0x2F53 MSTORE DUP1 PUSH2 0x37D6 MSTORE POP PUSH2 0x48FD PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3FB JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x215 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x125 JUMPI DUP1 PUSH4 0xC771C390 GT PUSH2 0xB8 JUMPI DUP1 PUSH4 0xD82745C8 GT PUSH2 0x87 JUMPI DUP1 PUSH4 0xD82745C8 EQ PUSH2 0xBFA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC20 JUMPI DUP1 PUSH4 0xEE947A7C EQ PUSH2 0xC4E JUMPI DUP1 PUSH4 0xEFF98843 EQ PUSH2 0xC56 JUMPI DUP1 PUSH4 0xFEC984E3 EQ PUSH2 0xC5E JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xC771C390 EQ PUSH2 0xB79 JUMPI DUP1 PUSH4 0xC965B548 EQ PUSH2 0xB96 JUMPI DUP1 PUSH4 0xCC0FEF02 EQ PUSH2 0xBC4 JUMPI DUP1 PUSH4 0xD7BD3C91 EQ PUSH2 0xBCC JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xB69410DE GT PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB69410DE EQ PUSH2 0xACF JUMPI DUP1 PUSH4 0xB6B55F25 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0xAF4 JUMPI DUP1 PUSH4 0xC59E3959 EQ PUSH2 0xB53 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xA4F JUMPI DUP1 PUSH4 0xAC641655 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xAED4966A EQ PUSH2 0xA83 JUMPI DUP1 PUSH4 0xAF6D5571 EQ PUSH2 0xAA9 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 GT PUSH2 0x1A8 JUMPI DUP1 PUSH4 0x9759164A GT PUSH2 0x177 JUMPI DUP1 PUSH4 0x9759164A EQ PUSH2 0x9EC JUMPI DUP1 PUSH4 0x9F3C7325 EQ PUSH2 0x9F4 JUMPI DUP1 PUSH4 0xA33142F7 EQ PUSH2 0x9FC JUMPI DUP1 PUSH4 0xA43BAA3D EQ PUSH2 0xA04 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xA23 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x84B76824 EQ PUSH2 0x988 JUMPI DUP1 PUSH4 0x8905FD4F EQ PUSH2 0x990 JUMPI DUP1 PUSH4 0x9185192A EQ PUSH2 0x9B6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x9E4 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x76687D3D GT PUSH2 0x1E4 JUMPI DUP1 PUSH4 0x76687D3D EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x7B99ADB1 EQ PUSH2 0x946 JUMPI DUP1 PUSH4 0x80CD916D EQ PUSH2 0x963 JUMPI DUP1 PUSH4 0x80E7CE85 EQ PUSH2 0x96B JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8DA JUMPI DUP1 PUSH4 0x71073BAC EQ PUSH2 0x900 JUMPI DUP1 PUSH4 0x73EF9A50 EQ PUSH2 0x908 JUMPI DUP1 PUSH4 0x7666F125 EQ PUSH2 0x910 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D GT PUSH2 0x310 JUMPI DUP1 PUSH4 0x46C162DE GT PUSH2 0x2A3 JUMPI DUP1 PUSH4 0x51B42B00 GT PUSH2 0x272 JUMPI DUP1 PUSH4 0x51B42B00 EQ PUSH2 0x81C JUMPI DUP1 PUSH4 0x613384F2 EQ PUSH2 0x824 JUMPI DUP1 PUSH4 0x641AD8A9 EQ PUSH2 0x84A JUMPI DUP1 PUSH4 0x66967791 EQ PUSH2 0x876 JUMPI DUP1 PUSH4 0x681CB10A EQ PUSH2 0x89C JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x46C162DE EQ PUSH2 0x7DE JUMPI DUP1 PUSH4 0x4BB278F3 EQ PUSH2 0x7E6 JUMPI DUP1 PUSH4 0x4E97415F EQ PUSH2 0x7EE JUMPI DUP1 PUSH4 0x4F85221A EQ PUSH2 0x814 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x40504BA0 GT PUSH2 0x2DF JUMPI DUP1 PUSH4 0x40504BA0 EQ PUSH2 0x747 JUMPI DUP1 PUSH4 0x40BDE098 EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0x410DBF7E EQ PUSH2 0x79B JUMPI DUP1 PUSH4 0x443BB293 EQ PUSH2 0x7B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x70B JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x713 JUMPI DUP1 PUSH4 0x4046AF2B EQ PUSH2 0x73F JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 GT PUSH2 0x393 JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x362 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x628 JUMPI DUP1 PUSH4 0x24600FC3 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x24B92E8E EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x27F91856 EQ PUSH2 0x68C JUMPI DUP1 PUSH4 0x2AC04AC8 EQ PUSH2 0x6B8 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0x1831CCF2 EQ PUSH2 0x57A JUMPI DUP1 PUSH4 0x1AA37CEC EQ PUSH2 0x582 JUMPI DUP1 PUSH4 0x209B2BCA EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0x21C0B342 EQ PUSH2 0x5C2 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH4 0xD49B38C GT PUSH2 0x3CF JUMPI DUP1 PUSH4 0xD49B38C EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x13BF9E7E EQ PUSH2 0x521 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x572 JUMPI PUSH2 0x3FB JUMP JUMPDEST DUP1 PUSH3 0x41C52C EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x33B1CF0 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x4D9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC66 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x464 PUSH2 0xCA9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x49E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x486 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4CB JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x4EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xD3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x440 PUSH2 0xD5D JUMP JUMPDEST PUSH2 0x529 PUSH2 0xD81 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST PUSH2 0x55C PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x505 PUSH2 0xF0F JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x598 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF18 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x440 PUSH2 0x1025 JUMP JUMPDEST PUSH2 0x5F0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x5D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xE0 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x615 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x5FD JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x63E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1525 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1607 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1619 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x6CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x17BA JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x704 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1991 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x1AED JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x729 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1AF6 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x1B4A JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x75D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1B6E JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BEF JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1C58 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1D6D JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1E3B JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1E80 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x1EA0 JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x83A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1FF9 JUMP JUMPDEST PUSH2 0x852 PUSH2 0x200E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x862 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x201C JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x2042 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x20ED JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2108 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x210E JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x220C JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2212 JUMP JUMPDEST PUSH2 0x440 PUSH2 0x225D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x981 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x22D4 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2370 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x9CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x2445 JUMP JUMPDEST PUSH2 0x464 PUSH2 0x24AD JUMP JUMPDEST PUSH2 0x440 PUSH2 0x250E JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0x253E JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x258D JUMP JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x25FB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x260F JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2615 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2630 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x2642 JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2666 JUMP JUMPDEST PUSH2 0xB3A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x505 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x285D JUMP JUMPDEST PUSH2 0x5B8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x2872 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x28FA JUMP JUMPDEST PUSH2 0x5B8 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x440 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x2942 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2968 JUMP JUMPDEST PUSH2 0x426 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x297A JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29AB JUMP JUMPDEST PUSH2 0x426 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD18 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0xD4C PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH20 0x0 PUSH4 0x767F5038 PUSH2 0xDCC PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP5 SWAP1 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x0 DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x0 SWAP1 SWAP3 AND PUSH1 0x84 DUP4 ADD MSTORE MLOAD PUSH1 0xA4 DUP1 DUP4 ADD SWAP3 PUSH1 0xA0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xEC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0xEDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x80 SWAP1 SWAP5 ADD MLOAD SWAP3 SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0xF20 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0xF2A PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0xF3D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0xFBECB171 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x16 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0x0 SWAP2 PUSH4 0xFBECB171 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1000 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1014 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1020 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1051 PUSH2 0x46AF JUMP JUMPDEST PUSH2 0x1059 PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x1061 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP7 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x4E71D92D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x4E71D92D SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 PUSH1 0xE0 SWAP4 SWAP3 SWAP1 DUP4 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 DUP3 SWAP1 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x10 SLOAD PUSH1 0x40 MLOAD PUSH4 0x3FAA6C5D PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x3FAA6C5D SWAP2 DUP9 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0xE0 DUP1 DUP4 DUP4 DUP13 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x117E JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1166 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x11D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x60 SWAP1 SWAP4 ADD MLOAD PUSH1 0x11 SLOAD SWAP3 SWAP8 POP SWAP1 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP3 GT PUSH2 0x120E JUMPI PUSH1 0x11 DUP1 SLOAD DUP4 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1232 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x1224 SWAP1 DUP3 SWAP1 DUP5 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x11 DUP1 SLOAD PUSH1 0x0 SWAP1 SWAP2 SSTORE SWAP3 POP SWAP1 POP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x1245 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1272 PUSH32 0x0 DUP6 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x129C PUSH32 0x0 DUP5 PUSH2 0x2DCC JUMP JUMPDEST PUSH2 0x12D5 PUSH32 0x0 PUSH2 0x12D0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH2 0x2DCC JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD ISZERO PUSH2 0x12F0 JUMPI PUSH2 0x12F0 DUP8 DUP7 PUSH1 0x6 PUSH1 0x20 MUL ADD MLOAD PUSH2 0x2E06 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x46C162DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x134B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x136B PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x1373 PUSH2 0x2BE0 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1492 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x14A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 PUSH1 0x60 DUP1 DUP7 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH32 0x21280D282CE6AA29C649FD1825373D7C77892FAC3F1958FD98D5CA52DD82A197 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 LOG2 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1532 DUP5 DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH2 0x15A8 DUP5 PUSH2 0x153E PUSH2 0x29B7 JUMP JUMPDEST PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x47C3 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x157C PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH2 0x29BB JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x15BB PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C5 PUSH2 0x3225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x15D2 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x15DC CALLER DUP3 PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x15E4 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH2 0x15F7 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xC SSTORE PUSH2 0x1602 PUSH2 0x336C JUMP JUMPDEST POP POP JUMPDEST JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x164E DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1672 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST SWAP1 POP PUSH20 0x0 PUSH4 0x297E7BF7 DUP7 DUP7 DUP5 PUSH2 0x169A CALLER PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1709 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP10 SWAP1 SSTORE DUP5 DUP5 MSTORE PUSH1 0x1B DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP8 SWAP1 SSTORE DUP1 MLOAD DUP10 DUP2 MSTORE SWAP2 DUP3 ADD DUP9 SWAP1 MSTORE DUP1 MLOAD SWAP3 SWAP6 POP SWAP3 SWAP4 POP PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x17EF DUP3 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x1B4C9031 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP10 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x1B4C9031 SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE DUP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE SWAP3 DUP3 MSTORE PUSH1 0x1B SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x18AF SWAP1 DUP6 PUSH2 0x332A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP10 DUP2 MSTORE SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 DUP10 AND SWAP4 SWAP2 SWAP3 CALLER SWAP3 PUSH32 0xFAA022EA2CD7F14157070896FABADAFE96CC4D4714EEF7AE6A992A5084493ED5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG4 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD CALLER SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP3 PUSH32 0x847E03D69A7075471D42285F4AC63570C10F3012D8BF736D66DE2EEF17AAC3E8 SWAP3 SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0xE7F3FB4DACBFF434E6D283D891F199C48B05B1629F610BD7DDC62353E162FB16 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1999 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19A4 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x19D2 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1A33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1A4B CALLER DUP5 PUSH2 0x33DD JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD TIMESTAMP SUB DUP2 LT ISZERO PUSH2 0x1AAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH22 0x140E95D2551211149055D7D393D517D0531313D5D151 PUSH1 0x52 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1AB6 CALLER DUP5 PUSH2 0x34BC JUMP JUMPDEST PUSH2 0x1ABE PUSH2 0x15B3 JUMP JUMPDEST PUSH2 0x1ADF CALLER PUSH2 0x1ADA PUSH2 0x1ACD PUSH2 0x3563 JUMP JUMPDEST DUP8 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH2 0x32AA JUMP JUMPDEST PUSH2 0x1AE7 PUSH2 0x2BE0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x1B03 PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x1 PUSH1 0x0 PUSH2 0x1B14 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP13 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B76 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP1 DUP3 KECCAK256 SLOAD DUP2 MLOAD PUSH4 0x175F8329 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 MLOAD SWAP4 AND SWAP3 PUSH4 0x175F8329 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1C25 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH2 0x35EB JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH2 0x3691 JUMP JUMPDEST DUP2 PUSH2 0x1C51 JUMPI INVALID JUMPDEST DIV SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1C60 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x2710 PUSH2 0x1C93 DUP3 PUSH32 0x0 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x1CD2 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x503A4241445F464545 PUSH1 0xB8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x10 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x9408BB8C08D29B335E36090045074610352365476D9DF02E203C25DB4FCD67C0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1E3B JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D49 PUSH2 0x336C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x1D59 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x1D65 DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x36D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1D75 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1D7F PUSH1 0x0 PUSH2 0x2B24 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D89 PUSH2 0xD81 JUMP JUMPDEST POP POP SWAP3 POP POP POP DUP1 PUSH2 0x1DD1 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x503A494E5355465F5354414B45 PUSH1 0x98 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x14 DUP1 SLOAD PUSH1 0x1 SWAP2 SWAP1 PUSH2 0xFF00 NOT AND PUSH2 0x100 DUP4 MUL OR SWAP1 SSTORE POP PUSH1 0x14 SLOAD PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP2 PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND SWAP1 DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E25 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 PUSH2 0x1C4A SWAP1 PUSH2 0x1C45 SWAP1 PUSH2 0x1C39 PUSH2 0x1C34 PUSH2 0x1E71 DUP9 PUSH2 0x20ED JUMP JUMPDEST PUSH1 0x6 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E9A JUMPI INVALID JUMPDEST EQ SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x1EA8 PUSH2 0x2B14 JUMP JUMPDEST PUSH2 0x1EB2 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xABBEDB40 PUSH2 0x1EF5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH32 0x0 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1F93 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x14 DUP1 SLOAD PUSH2 0xFF00 NOT AND PUSH2 0x200 OR SWAP1 DUP2 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x24B0AFB747A8213AEA796B9518BFA667DE187B83390EDA7CC93B8E57F80FCD1A SWAP4 POP PUSH2 0x100 SWAP1 SWAP2 DIV PUSH1 0xFF AND SWAP2 POP DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1FE4 JUMPI INVALID JUMPDEST PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xD57 SWAP1 PUSH2 0x1D33 DUP5 PUSH2 0x1BEF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x340E5885 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x681CB10A SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x20CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x20E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2119 CALLER PUSH2 0x20ED JUMP JUMPDEST EQ ISZERO PUSH2 0x2159 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x140E96915493D7D09053 PUSH1 0xB2 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 TIMESTAMP SWAP1 DUP2 SWAP1 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH2 0x21AC PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0xDF56132520665B33CD5731C5CFBACD8BEE82524E67DF563BB25B2BE304F91D44 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x12 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x221A PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2222 PUSH2 0x2D40 JUMP JUMPDEST PUSH1 0x12 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3FF20538222F568F27FF436C0C49DFD3E48D5B8F86533A3F759DC1C7089775AB SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x22A4 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST DUP1 ISZERO PUSH2 0xD57 JUMPI POP PUSH1 0x12 SLOAD PUSH2 0x22CC DUP4 PUSH2 0x22C0 PUSH1 0x11 SLOAD PUSH2 0x22C0 PUSH2 0x37D2 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2329 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x503A4E4F545F5749544844524157494E47 PUSH1 0x78 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP4 SWAP1 SSTORE DUP1 MLOAD SWAP3 DUP4 MSTORE MLOAD PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 JUMP JUMPDEST PUSH20 0x0 PUSH4 0xA89D5DDB DUP3 PUSH32 0x0 PUSH2 0x23D5 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x24 DUP5 ADD MSTORE SWAP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x64 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x242A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x243E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x244D PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP6 ISZERO ISZERO SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE DUP3 MLOAD SWAP1 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x353578BBC0AB907B7018B0F7B50B5F822D31DC9FCF4C16FFFA780E109CA7C930 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0xD35 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD0A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD35 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0xE SLOAD DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH2 0x2546 PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x14 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH1 0xFF NOT SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0xEEBA6FD794E30165023F7E3D017E92901622076A95D36E45906955E025FF4FE7 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x259A PUSH2 0x29B7 JUMP JUMPDEST DUP5 PUSH2 0x15A3 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x48A3 PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 PUSH2 0x25C4 PUSH2 0x29B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP2 DUP14 AND DUP2 MSTORE SWAP3 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD53 PUSH2 0x2608 PUSH2 0x29B7 JUMP JUMPDEST DUP5 DUP5 PUSH2 0x3010 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x266E PUSH2 0x2C70 JUMP JUMPDEST PUSH2 0x2678 PUSH1 0x1 PUSH2 0x2B24 JUMP JUMPDEST PUSH2 0x2681 DUP2 PUSH2 0x2281 JUMP JUMPDEST PUSH2 0x26C6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E91115417D393D517D0531313D5D151 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 SWAP1 SSTORE PUSH2 0x26E1 DUP3 PUSH2 0x3390 JUMP JUMPDEST SWAP1 POP PUSH2 0x26F8 PUSH1 0x15 PUSH2 0x26F1 CALLER PUSH2 0x20ED JUMP JUMPDEST DUP4 CALLER PUSH2 0x389B JUMP JUMPDEST PUSH2 0x2753 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER PUSH32 0x0 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x3954 AND JUMP JUMPDEST PUSH2 0x275D CALLER DUP3 PUSH2 0x39AE JUMP JUMPDEST PUSH2 0x2765 PUSH2 0x2BE0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x8A05F911D8AB7FC50FEC37EF4BA7F9BFCB1A3C191C81DCD824AD0946C4E20D65 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xC3746825 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP9 AND PUSH1 0x4 DUP4 ADD MSTORE DUP1 DUP8 AND PUSH1 0x24 DUP4 ADD MSTORE DUP1 DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x0 SWAP3 DUP4 SWAP3 PUSH20 0x0 SWAP3 PUSH4 0xC3746825 SWAP3 PUSH1 0xA4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2830 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x18 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH2 0x287A PUSH2 0x2B14 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 GT ISZERO PUSH2 0x28BF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F56414C5545 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x13 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x3094B4CE0463766C3CD81ED2AE2451610DCAC39A1061FA023CA9D3D4DF959F75 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x1A PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2921 PUSH2 0x39FA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT PUSH2 0x2931 JUMPI POP PUSH2 0x1605 JUMP JUMPDEST PUSH2 0x1D6A PUSH2 0x293D DUP3 PUSH2 0x3691 JUMP JUMPDEST PUSH2 0x3A18 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 SLOAD DUP2 JUMP JUMPDEST PUSH1 0xF SLOAD DUP2 JUMP JUMPDEST CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x2A00 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4831 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x2A45 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4713 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2B0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B1C PUSH2 0x3B1D JUMP JUMPDEST PUSH2 0x1605 PUSH2 0x2C70 JUMP JUMPDEST DUP1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B30 JUMPI INVALID JUMPDEST PUSH1 0x14 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B46 JUMPI INVALID JUMPDEST EQ PUSH2 0x1D6A JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x503A4241445F5354415445 PUSH1 0xA8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x15AC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2047D1633FF7768462AE07D28CB16E484203BFD6D85CE832494270EBCD9081A2 PUSH2 0x2C5D PUSH2 0x37D2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 JUMP JUMPDEST PUSH2 0x2C99 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x425FAD58 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2CE5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2CFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD ISZERO PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E941493D513D7D4105554D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ DUP1 PUSH2 0x2D86 JUMPI POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x17 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND JUMPDEST PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D2727AA2FA222A62FA7A92FA0A226A4A7 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x1602 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH3 0x715B09 PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH20 0x0 SWAP2 PUSH4 0x715B090 SWAP2 PUSH1 0x84 DUP1 DUP3 ADD SWAP3 PUSH1 0x60 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2EDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2EF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP DUP1 DUP5 GT ISZERO PUSH2 0x2F46 JUMPI PUSH1 0xD SLOAD PUSH2 0x2F3B SWAP1 DUP3 DUP7 SUB PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x2F46 PUSH2 0x2917 JUMP JUMPDEST PUSH2 0x2FA0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH32 0x0 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x3B86 AND JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH2 0x2FB3 SWAP1 DUP6 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x11 SSTORE PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xD393D18014C1898545668C52621BCED9493753BE5B8138F2539542CA606732EB SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3018 PUSH2 0x2C70 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3044 PUSH32 0x0 PUSH2 0x2AA7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9F51290B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x307B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x308F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x30BD DUP6 DUP5 PUSH2 0x33DD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x19 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 ADD DUP2 ADD TIMESTAMP GT PUSH2 0x3120 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH16 0x140E9513D7D393D517D0531313D5D151 PUSH1 0x82 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x312B DUP7 PUSH2 0x201C JUMP JUMPDEST EQ PUSH2 0x316E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A5245434F475F4C4F53534553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x3183 PUSH1 0x15 PUSH2 0x317C DUP7 PUSH2 0x20ED JUMP JUMPDEST DUP6 DUP8 PUSH2 0x389B JUMP JUMPDEST PUSH2 0x243E DUP6 DUP6 DUP6 PUSH2 0x3BD8 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x321D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x320F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3230 CALLER PUSH2 0x1D0D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3254 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xFBC3A599B784FE88772FC5ABCC07223F64CA0B13ACC341F4FB1E46BEF0510EB4 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x318E JUMP JUMPDEST PUSH1 0xE DUP1 SLOAD PUSH1 0xC SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD57 PUSH32 0x0 PUSH1 0xA EXP PUSH2 0x33D1 DUP5 PUSH8 0xDE0B6B3A7640000 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D69 AND JUMP JUMPDEST PUSH1 0x13 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x15 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD TIMESTAMP SWAP2 PUSH2 0x340B SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST GT ISZERO PUSH2 0x344F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E9195539114D7D313D0D2D151 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3475 DUP3 PUSH2 0x1D33 DUP6 PUSH2 0x20ED JUMP JUMPDEST LT ISZERO PUSH2 0x1602 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH17 0x140E925394D55197D514905394D7D09053 PUSH1 0x7A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x34C6 DUP3 DUP3 PUSH2 0x3DAB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x34E3 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x356D PUSH2 0x3E52 JUMP JUMPDEST PUSH1 0xD SLOAD SWAP1 SWAP2 POP PUSH2 0x3583 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0xD SSTORE PUSH2 0x358E PUSH2 0x39FA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x35A1 JUMPI POP PUSH1 0x0 PUSH2 0xD57 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x35AE JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47A2 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0xC80 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x29A6AA9D27A7A1 PUSH1 0xC9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3641 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x3656 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3656 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x475B PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x358E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x7 PUSH1 0x24 DUP3 ADD MSTORE PUSH7 0x534D493A4E4547 PUSH1 0xC8 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x36DC PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3720 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x372A JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH2 0x3761 PUSH2 0x3735 PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3749 DUP4 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3750 JUMPI INVALID JUMPDEST PUSH1 0x6 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x6 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD CALLER SWAP2 PUSH32 0x26536799ACE2C3DBE12E638EC3ADE6B4173DCF1289BE0A58D51A5003015649BD SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x6 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x1F8D7705F31C3337A080803A8AD7E71946FB88D84738879BE2BF402F97156E96 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x386A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x387E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 DUP5 DUP5 ADD PUSH2 0x38C2 JUMPI DUP2 PUSH2 0x38F8 JUMP JUMPDEST PUSH2 0x38F8 PUSH2 0x38EB DUP7 DUP7 ADD PUSH2 0x33D1 DUP8 PUSH2 0x38DF TIMESTAMP DUP9 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP4 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF9B842C70D79466435B46540BB988AA5C998B3243BF91C36380DDB5887C0F0E4 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1AE7 SWAP1 DUP6 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x39B8 DUP3 DUP3 PUSH2 0x3F88 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3508 PUSH2 0x39D5 PUSH2 0x1C34 DUP5 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0xF DUP1 SLOAD PUSH1 0xD SLOAD SWAP2 DUP3 SWAP1 SSTORE PUSH1 0x0 SWAP2 PUSH2 0x338A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3A22 PUSH2 0xF09 JUMP JUMPDEST GT PUSH2 0x3A66 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x4644543A5A45524F5F535550504C59 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x3A70 JUMPI PUSH2 0x1D6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AA9 PUSH2 0x3A7D PUSH2 0xF09 JUMP JUMPDEST PUSH2 0x3A91 DUP5 PUSH1 0x1 PUSH1 0x80 SHL PUSH4 0xFFFFFFFF PUSH2 0x3592 AND JUMP JUMPDEST DUP2 PUSH2 0x3A98 JUMPI INVALID JUMPDEST PUSH1 0x9 SLOAD SWAP2 SWAP1 DIV PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x9 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP CALLER SWAP2 PUSH32 0xF88156A8032A0D2C65DF18FAFAF84E0BEA647B3D94A0F7FC6AB14C97DEC2BF74 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0x240CE2B5CE9E9E5A70010C7F8034C233D89B7CE2D60F3A38D9BC3CA01A36F88C SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0x1605 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x140E9393D517D11153 PUSH1 0xBA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x1020 SWAP1 DUP5 SWAP1 PUSH2 0x3ED7 JUMP JUMPDEST PUSH2 0x3BE3 DUP4 DUP4 DUP4 PUSH2 0x3FD4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3BFD PUSH2 0x1C34 DUP4 PUSH1 0x9 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C2A SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3C64 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xB464DE3159E090617503D0166BFF9FFEECDEFD42CD9DBB49F918DF95A80FDEA3 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x3D19 JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x3D2E JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x3D2E JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x15AC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4855 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x15AC DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x4100 JUMP JUMPDEST PUSH2 0x3DB5 DUP3 DUP3 PUSH2 0x4165 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3DD2 PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP5 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3E5D CALLER PUSH2 0x201C JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x3E81 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xB PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP1 DUP2 ADD DUP5 SWAP1 MSTORE DUP2 MLOAD SWAP4 SWAP5 POP SWAP2 SWAP3 PUSH32 0x814EBA35782909DBBAEEFB8104073DFCA45DE43173F7077970C1584B3CF918B5 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F2C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x426D SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1020 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3F4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x4879 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3F92 DUP3 DUP3 PUSH2 0x4284 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3DF7 PUSH2 0x3FAF PUSH2 0x1C34 DUP5 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH2 0x3FDF DUP4 DUP4 DUP4 PUSH2 0x4380 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF9 PUSH2 0x1C34 DUP4 PUSH1 0x6 SLOAD PUSH2 0x3592 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4026 SWAP1 DUP4 PUSH4 0xFFFFFFFF PUSH2 0x362C AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP5 SWAP1 SSTORE SWAP2 DUP8 AND DUP2 MSTORE SWAP1 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x4060 SWAP1 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x3D04 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x7 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD DUP7 DUP2 MSTORE SWAP2 MLOAD SWAP4 SWAP5 POP SWAP2 DUP10 AND SWAP3 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP3 SWAP2 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH32 0xF694BEBD33ADA288AE2F4485315DB76739E2D5501DAF315E71C9D8F841AA7773 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x414F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x415B JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x47EB PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41B6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x41F9 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x46F1 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH1 0x2 SLOAD PUSH2 0x4225 SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x332A AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x427C DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x44E7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x42DF JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x42EB PUSH1 0x0 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x42FE SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x432A SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x43C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x480C PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x440A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x46CE PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4415 DUP4 DUP4 DUP4 PUSH2 0x1020 JUMP JUMPDEST PUSH2 0x4458 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4735 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x318E AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x448D SWAP1 DUP3 PUSH4 0xFFFFFFFF PUSH2 0x2B86 AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x4528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x477C PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x4531 DUP6 PUSH2 0x4643 JUMP JUMPDEST PUSH2 0x4582 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x45C1 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x45A2 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x4623 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x4628 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x4638 DUP3 DUP3 DUP7 PUSH2 0x4649 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x4658 JUMPI POP DUP2 PUSH2 0x15AC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x4668 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x31E2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x31CA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x7 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY POP SWAP2 SWAP3 SWAP2 POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH3 0x75726E KECCAK256 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E636545524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F766520746F20746865207A65726F20616464 PUSH19 0x65737345524332303A207472616E7366657220 PUSH2 0x6D6F PUSH22 0x6E7420657863656564732062616C616E63655369676E PUSH6 0x64536166654D PUSH2 0x7468 GASPRICE KECCAK256 PUSH2 0x6464 PUSH10 0x74696F6E206F76657266 PUSH13 0x6F77416464726573733A20696E PUSH20 0x756666696369656E742062616C616E636520666F PUSH19 0x2063616C6C536166654D6174683A206D756C74 PUSH10 0x706C69636174696F6E20 PUSH16 0x766572666C6F7745524332303A207472 PUSH2 0x6E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH3 0x75726E KECCAK256 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A207472616E7366657220 PUSH7 0x726F6D20746865 KECCAK256 PUSH27 0x65726F206164647265737345524332303A20617070726F76652066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH10 0x676E6564536166654D61 PUSH21 0x683A207375627472616374696F6E206F766572666C PUSH16 0x775361666545524332303A2045524332 ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x75636365656445524332303A2064656372656173 PUSH6 0x6420616C6C6F PUSH24 0x616E63652062656C6F77207A65726FA26469706673582212 KECCAK256 0xEC JUMPI 0x2C SGT 0x2B DUP13 0x22 0xAD DUP4 0xF8 0x29 SWAP4 0x25 PUSH6 0xBE6106A16D99 0xCE 0x4D CHAINID PUSH32 0xF59C7503F0A88AD564736F6C634300060B0033A2646970667358221220C37F2D 0xF 0xC1 MULMOD SGT 0xE7 0xED SWAP2 PUSH8 0xA97619B039BBE56 0xD4 0xD2 MLOAD CREATE2 0xEC 0xDB 0xB1 0x4B 0xEC SWAP14 0x22 SWAP10 0x28 PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "195876:3489:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;196604:1605;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;196604:1605:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;196604:1605:0;;;;;;;;;;;;;;198577:116;;;:::i;:::-;;196174:50;;;;;;;;;;;;;;;;-1:-1:-1;196174:50:0;-1:-1:-1;;;;;196174:50:0;;:::i;:::-;;;;;;;;;;;;;;;;;;194333:76;;;:::i;196299:61::-;;;;;;;;;;;;;;;;-1:-1:-1;196299:61:0;-1:-1:-1;;;;;196299:61:0;;:::i;198459:112::-;;;:::i;196033:36::-;;;:::i;:::-;;;;;;;;;;;;;;;;195981:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;196119:49;;;;;;;;;;;;;;;;-1:-1:-1;196119:49:0;;:::i;196075:37::-;;;:::i;195930:45::-;;;:::i;196460:138::-;;;;;;;;;;;;;;;;-1:-1:-1;196460:138:0;-1:-1:-1;;;;;196460:138:0;;:::i;198215:238::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;198215:238:0;;;;;;;;;;:::i;196604:1605::-;196872:19;194639:7;;;;194638:8;194630:37;;;;;-1:-1:-1;;;194630:37:0;;;;;;;;;;;;-1:-1:-1;;;194630:37:0;;;;;;;;;;;;;;;196903:24:::1;:22;:24::i;:::-;196976:7;::::0;197005:64:::1;::::0;;-1:-1:-1;;;197005:64:0;;197040:4:::1;197005:64;::::0;::::1;::::0;-1:-1:-1;;;;;197005:64:0;;::::1;::::0;;;;195974:1:::1;197005:64:::0;;;;;;196976:7;;;::::1;::::0;;;197005:26:::1;::::0;:64;;;;;::::1;::::0;;;;;;;;;196976:7;197005:64;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;197005:64:0;196997:91:::1;;;::::0;;-1:-1:-1;;;196997:91:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;196997:91:0;;;;;;;;;;;;;::::1;;197110:64;::::0;;-1:-1:-1;;;197110:64:0;;197145:4:::1;196025:1;197110:64:::0;;::::1;::::0;;;;-1:-1:-1;;;;;197110:64:0;;::::1;::::0;;;;;;;;;;;;;:26;;::::1;::::0;::::1;::::0;:64;;;;;::::1;::::0;;;;;;;;;:26;:64;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;197110:64:0;197102:91:::1;;;::::0;;-1:-1:-1;;;197102:91:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;197102:91:0;;;;;;;;;;;;;::::1;;197215:40;::::0;;-1:-1:-1;;;197215:40:0;;197244:10:::1;197215:40;::::0;::::1;::::0;;;-1:-1:-1;;;;;197215:28:0;::::1;::::0;::::1;::::0;:40;;;;;::::1;::::0;;;;;;;;:28;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;197215:40:0;197207:92:::1;;;::::0;;-1:-1:-1;;;197207:92:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;197207:92:0;;;;;;;;;;;;;::::1;;194677:1;197320:18;:41;;;;;;;;;;;;;-1:-1:-1::0;;;197320:41:0::1;;::::0;::::1;;197371:20;:31;;;;;;;;;;;;;-1:-1:-1::0;;;197371:31:0::1;;::::0;::::1;;197413:9;197463:10;197491:14;197523:10;197551:9;197578;197605:10;197633:11;197662:12;197692:4;197714:6;197437:297;;;;;:::i;:::-;-1:-1:-1::0;;;;;197437:297:0;;::::1;::::0;;;;::::1;;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;-1:-1:-1;197437:297:0::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;197437:297:0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;197413:321;;197775:4;197745:35;;197812:11;197790:5;:19;197796:12;;197790:19;;;;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;197790:33:0::1;;;;;-1:-1:-1::0;;;;;197790:33:0::1;;;;;;197855:4;197833:6;:19;197840:11;-1:-1:-1::0;;;;;197833:19:0::1;-1:-1:-1::0;;;;;197833:19:0::1;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;197871:12;;197869:14;;;;;;;;;;;197949:10;-1:-1:-1::0;;;;;197899:303:0::1;197924:11;-1:-1:-1::0;;;;;197899:303:0::1;;197973:14;198001:10;198025:4;-1:-1:-1::0;;;;;198025:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;198025:22:0;198061:18:::1;::::0;;-1:-1:-1;;;198061:18:0;;;;-1:-1:-1;;;;;198061:16:0;::::1;::::0;::::1;::::0;:18:::1;::::0;;::::1;::::0;198025:22:::1;::::0;198061:18;;;;;;;:16;:18;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;198093:10;198117:11;198142:12;198168:4;198186:6;197899:303;;;;-1:-1:-1::0;;;;;197899:303:0::1;-1:-1:-1::0;;;;;197899:303:0::1;;;;;;-1:-1:-1::0;;;;;197899:303:0::1;-1:-1:-1::0;;;;;197899:303:0::1;;;;;;-1:-1:-1::0;;;;;197899:303:0::1;-1:-1:-1::0;;;;;197899:303:0::1;;;;;;-1:-1:-1::0;;;;;197899:303:0::1;-1:-1:-1::0;;;;;197899:303:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;197899:303:0;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;194677:1;;;196604:1605:::0;;;;;;;;;:::o;198577:116::-;198624:36;:34;:36::i;:::-;198670:16;:14;:16::i;:::-;198577:116::o;196174:50::-;;;;;;;;;;;;;;;:::o;194333:76::-;194372:4;194395:7;;;194333:76;:::o;196299:61::-;;;;;;;;;;;;;;;:::o;198459:112::-;198504:36;:34;:36::i;:::-;198550:14;:12;:14::i;196033:36::-;;;;:::o;195981:45::-;196025:1;195981:45;:::o;196119:49::-;;;;;;;;;;;;-1:-1:-1;;;;;196119:49:0;;:::o;196075:37::-;;;-1:-1:-1;;;;;196075:37:0;;:::o;195930:45::-;195974:1;195930:45;:::o;196460:138::-;196528:18;:16;:18::i;:::-;196556:7;:35;;-1:-1:-1;;;;;;196556:35:0;-1:-1:-1;;;;;196556:35:0;;;;;;;;;;196460:138::o;198215:238::-;198312:18;:16;:18::i;:::-;-1:-1:-1;;;;;198340:35:0;;;;;;:17;:35;;;;;;;;;:45;;-1:-1:-1;;198340:45:0;;;;;;;;;;198400:46;;;;;;;;;;;;;;;;;198215:238;;:::o;199244:118::-;199311:7;;;;;;;;;-1:-1:-1;;;;;199311:7:0;-1:-1:-1;;;;;199311:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;199311:24:0;199310:25;199302:53;;;;;-1:-1:-1;;;199302:53:0;;;;;;;;;;;;-1:-1:-1;;;199302:53:0;;;;;;;;;;;;;;198984:174;199076:7;;;;;;;;;-1:-1:-1;;;;;199076:7:0;-1:-1:-1;;;;;199076:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;199076:18:0;-1:-1:-1;;;;;199062:32:0;:10;:32;;:65;;-1:-1:-1;199116:10:0;199098:29;;;;:17;:29;;;;;;;;199062:65;199054:97;;;;;-1:-1:-1;;;199054:97:0;;;;;;;;;;;;-1:-1:-1;;;199054:97:0;;;;;;;;;;;;;;195335:117;194903:7;;;;194895:40;;;;;-1:-1:-1;;;194895:40:0;;;;;;;;;;;;-1:-1:-1;;;194895:40:0;;;;;;;;;;;;;;;195403:5:::1;195393:15:::0;;-1:-1:-1;;195393:15:0::1;::::0;;195423:22:::1;195432:12;:10;:12::i;:::-;195423:22;::::0;;-1:-1:-1;;;;;195423:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;195335:117::o:0;195088:115::-;194639:7;;;;194638:8;194630:37;;;;;-1:-1:-1;;;194630:37:0;;;;;;;;;;;;-1:-1:-1;;;194630:37:0;;;;;;;;;;;;;;;195147:7:::1;:14:::0;;-1:-1:-1;;195147:14:0::1;195157:4;195147:14;::::0;;195176:20:::1;195183:12;:10;:12::i;198770:114::-:0;198844:7;;;;;;;;;-1:-1:-1;;;;;198844:7:0;-1:-1:-1;;;;;198844:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;198844:18:0;-1:-1:-1;;;;;198830:32:0;:10;:32;198822:55;;;;;-1:-1:-1;;;198822:55:0;;;;;;;;;;;;-1:-1:-1;;;198822:55:0;;;;;;;;;;;;;;33684:104;33771:10;33684:104;:::o;-1:-1:-1:-;;;;;;;;:::o"
            },
            "methodIdentifiers": {
              "LL_FACTORY()": "c5ba73ed",
              "SL_FACTORY()": "9f71f14a",
              "createPool(address,address,address,address,uint256,uint256,uint256)": "312b8982",
              "globals()": "c3124525",
              "isPool(address)": "5b16ebb7",
              "pause()": "8456cb59",
              "paused()": "5c975abb",
              "poolFactoryAdmins(address)": "6050abb2",
              "pools(uint256)": "ac4afa38",
              "poolsCreated()": "945164e7",
              "setGlobals(address)": "cc2e0a26",
              "setPoolFactoryAdmin(address,bool)": "f3f616c0",
              "unpause()": "3f4ba83a"
            }
          }
        },
        "PoolLib": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "liquidityProvider",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "depositDate",
                  "type": "uint256"
                }
              ],
              "name": "DepositDateUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "loan",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "debtLocker",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "amountFunded",
                  "type": "uint256"
                }
              ],
              "name": "LoanFunded",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "BPTVal",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "DL_FACTORY",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "MAX_UINT256",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "WAD",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256[7]",
                  "name": "claimInfo",
                  "type": "uint256[7]"
                },
                {
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                }
              ],
              "name": "calculateClaimAndPortions",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "poolDelegatePortion",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "stakeLockerPortion",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "principalClaim",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "interestClaim",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amt",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidityAssetDecimals",
                  "type": "uint256"
                }
              ],
              "name": "fromWad",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "globals",
                  "type": "IMapleGlobals"
                },
                {
                  "internalType": "address",
                  "name": "balancerPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "poolDelegate",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "getInitialStakeRequirements",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "swapOutAmountRequired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "currentPoolDelegateCover",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "enoughStakeForFinalization",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "poolAmountInRequired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "poolAmountPresent",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "liquidityAssetAmountRequired",
                  "type": "uint256"
                }
              ],
              "name": "getPoolSharesRequired",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "poolAmountInRequired",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "stakerBalance",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "staker",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "getSwapOutValue",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_bPool",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeLocker",
                  "type": "address"
                }
              ],
              "name": "getSwapOutValueLocker",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "custodian",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "newTotalAllowance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "fdtBal",
                  "type": "uint256"
                }
              ],
              "name": "increaseCustodyAllowanceChecks",
              "outputs": [],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "globals",
                  "type": "IMapleGlobals"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "stakeAsset",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "stakingFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "delegateFee",
                  "type": "uint256"
                }
              ],
              "name": "poolSanityChecks",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "name": "transferByCustodianChecks",
              "outputs": [],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "contract IMapleGlobals",
                  "name": "globals",
                  "type": "IMapleGlobals"
                },
                {
                  "internalType": "uint256",
                  "name": "principalOut",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "liquidityAsset",
                  "type": "address"
                }
              ],
              "name": "validateDeactivation",
              "outputs": [],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "612961610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106101155760003560e01c8063681cb10a116100ac578063abbedb401161007b578063abbedb40146103ef578063bf36f0e914610425578063c374682514610448578063ee7375be146104a7578063fbecb171146104e557610115565b8063681cb10a146102f15780636a1460241461032f578063767f503814610337578063a89d5ddb146103aa57610115565b8063297e7bf7116100e8578063297e7bf71461021957806333a581d2146102515780633faa6c5d1461026b5780634119bdfa146102b957610115565b80630715b0901461011a5780631498516814610181578063174a5be4146101c55780631b4c9031146101e3575b600080fd5b81801561012657600080fd5b506101636004803603608081101561013d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561053e565b60408051938452602084019290925282820152519081900360600190f35b6101c3600480360360a081101561019757600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356109e0565b005b6101cd610db3565b6040805160ff9092168252519081900360200190f35b6101c3600480360360608110156101f957600080fd5b506001600160a01b03813581169160208101359091169060400135610db8565b6101c36004803603608081101561022f57600080fd5b506001600160a01b038135169060208101359060408101359060600135610e5a565b610259610f3a565b60408051918252519081900360200190f35b610293600480360361012081101561028257600080fd5b5060e0810135610100820135610f40565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610259600480360360608110156102cf57600080fd5b506001600160a01b038135811691602081013582169160409091013516610ff1565b6102596004803603608081101561030757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611089565b6102596112bc565b61037f600480360360a081101561034d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166112c8565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b8180156103b657600080fd5b506101c3600480360360608110156103cd57600080fd5b506001600160a01b038135811691602081013582169160409091013516611374565b6101c36004803603606081101561040557600080fd5b506001600160a01b0381358116916020810135916040909101351661151d565b6102596004803603604081101561043b57600080fd5b508035906020013561157d565b61048e600480360360a081101561045e57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356115a8565b6040805192835260208301919091528051918290030190f35b610259600480360360808110156104bd57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606001351661192d565b8180156104f157600080fd5b506101c3600480360360c081101561050857600080fd5b508035906001600160a01b0360208201358116916040810135821691606082013581169160808101359091169060a00135611993565b60008080848161054f828a8a610ff1565b9050876001600160a01b031663f2d5d56b30846001600160a01b03166370a082318c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156105b757600080fd5b505afa1580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b038d1692506370a0823191602480820192602092909190829003018186803b15801561069357600080fd5b505afa1580156106a7573d6000803e3d6000fd5b505050506040513d60208110156106bd57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561070b57600080fd5b505afa15801561071f573d6000803e3d6000fd5b505050506040513d602081101561073557600080fd5b505190506001600160a01b0384166302c967488c8a8610156107575785610759565b8a5b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050506040513d60208110156107da57600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d602081101561084c57600080fd5b50519550610860818763ffffffff611e5d16565b9650836001600160a01b031663a9059cbb8b886040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050506040513d60208110156108ec57600080fd5b5050604080516370a0823160e01b815230600482015290516109729184916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561093a57600080fd5b505afa15801561094e573d6000803e3d6000fd5b505050506040513d602081101561096457600080fd5b50519063ffffffff611e5d16565b9450896001600160a01b031663bcd01be7886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50505050505050509450945094915050565b6040805163434a88c560e11b81526001600160a01b03868116600483015291518592881691638695118a916024808301926020929190829003018186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d6020811015610a5457600080fd5b5051610a9d576040805162461bcd60e51b8152602060048201526013602482015272140e9253959053125117d3125457d054d4d155606a1b604482015290519081900360640190fd5b612710610ab0848463ffffffff611e9f16565b1115610af4576040805162461bcd60e51b815260206004820152600e60248201526d503a494e56414c49445f4645455360901b604482015290519081900360640190fd5b856001600160a01b03166372a22d71856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b4a57600080fd5b505afa158015610b5e573d6000803e3d6000fd5b505050506040513d6020811015610b7457600080fd5b50518015610c635750806001600160a01b0316632f37b624876001600160a01b031663a05309466040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc557600080fd5b505afa158015610bd9573d6000803e3d6000fd5b505050506040513d6020811015610bef57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b158015610c3657600080fd5b505afa158015610c4a573d6000803e3d6000fd5b505050506040513d6020811015610c6057600080fd5b50515b8015610ced5750806001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610cc057600080fd5b505afa158015610cd4573d6000803e3d6000fd5b505050506040513d6020811015610cea57600080fd5b50515b8015610d5a5750806001600160a01b0316638d4e40836040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d6020811015610d5757600080fd5b50515b610dab576040805162461bcd60e51b815260206004820152601760248201527f503a494e56414c49445f42414c414e4345525f504f4f4c000000000000000000604482015290519081900360640190fd5b505050505050565b600181565b826001600160a01b0316826001600160a01b031614610e13576040805162461bcd60e51b8152602060048201526012602482015271281d24a72b20a624a22fa922a1a2a4ab22a960711b604482015290519081900360640190fd5b80610e55576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b505050565b6001600160a01b038416610eab576040805162461bcd60e51b8152602060048201526013602482015272281d24a72b20a624a22fa1aaa9aa27a224a0a760691b604482015290519081900360640190fd5b82610eed576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b80821115610f34576040805162461bcd60e51b815260206004820152600f60248201526e503a494e5355465f42414c414e434560881b604482015290519081900360640190fd5b50505050565b60001981565b6000808080610f846060880135610f78612710610f6c8a8c60015b60200201359063ffffffff611ef916565b9063ffffffff611f5216565b9063ffffffff611e9f16565b9350610f98612710610f6c878a6001610f5b565b9250610fb460a0880135610f7860408a013560808b0135611e9f565b9150610fe683610fda610fcf612710610f6c8b8d6001610f5b565b60208b013590611e5d565b9063ffffffff611e5d16565b905093509350935093565b600061107f8484866001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b5051611f94565b90505b9392505050565b6000808590506000836001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156110e757600080fd5b505afa1580156110fb573d6000803e3d6000fd5b505050506040513d602081101561111157600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038a16916318160ddd916004808301926020929190829003018186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d602081101561118357600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b038a8116600483015291519293506000929186169163f8b2cb4f91602480820192602092909190829003018186803b1580156111d557600080fd5b505afa1580156111e9573d6000803e3d6000fd5b505050506040513d60208110156111ff57600080fd5b50516040805163f1b8a9b760e01b81526001600160a01b038b8116600483015291519293506000929187169163f1b8a9b791602480820192602092909190829003018186803b15801561125157600080fd5b505afa158015611265573d6000803e3d6000fd5b505050506040513d602081101561127b57600080fd5b505190506112ae670de0b6b3a7640000610f6c6112988585612340565b6112a28888612340565b9063ffffffff611ef916565b9a9950505050505050505050565b670de0b6b3a764000081565b600080600080600061133f8a898c6001600160a01b0316633106374c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b505161244a565b945061134e89898989896115a8565b909250905061135f8989898961192d565b93508181101592509550955095509550959050565b806001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ad57600080fd5b505afa1580156113c1573d6000803e3d6000fd5b505050506040513d60208110156113d757600080fd5b50516001600160a01b03163314611421576040805162461bcd60e51b8152602060048201526009602482015268281d2727aa2fa3a7ab60b91b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161415801561144b57506001600160a01b03831615155b61148e576040805162461bcd60e51b815260206004820152600f60248201526e281d24a72b20a624a22faa27a5a2a760891b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051610e559133916001600160a01b038716916370a08231916024808301926020929190829003018186803b1580156114da57600080fd5b505afa1580156114ee573d6000803e3d6000fd5b505050506040513d602081101561150457600080fd5b50516001600160a01b038616919063ffffffff61255916565b6115298382606461244a565b821115610e55576040805162461bcd60e51b815260206004820152601760248201527f503a5052494e434950414c5f4f55545354414e44494e47000000000000000000604482015290519081900360640190fd5b600061159f670de0b6b3a7640000610f6c85600a86900a63ffffffff611ef916565b90505b92915050565b60008060008790506000816001600160a01b031663f8b2cb4f896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561160857600080fd5b505afa15801561161c573d6000803e3d6000fd5b505050506040513d602081101561163257600080fd5b505160408051634a46c67360e11b81526001600160a01b038b8116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d60208110156116ae57600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117da57600080fd5b505afa1580156117ee573d6000803e3d6000fd5b505050506040513d602081101561180457600080fd5b5051604080516382f652ad60e01b815260048101889052602481018790526044810186905260648101859052608481018c905260a4810183905290519192506001600160a01b038816916382f652ad9160c480820192602092909190829003018186803b15801561187457600080fd5b505afa158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b5051604080516370a0823160e01b81526001600160a01b038e811660048301529151929a50908c16916370a0823191602480820192602092909190829003018186803b1580156118ed57600080fd5b505afa158015611901573d6000803e3d6000fd5b505050506040513d602081101561191757600080fd5b5051979d979c50969a5050505050505050505050565b600061198a8585846001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b95945050505050565b6000856001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b5051604080516303526ce360e21b815290519192506000916001600160a01b03871691630d49b38c916004808301926020929190829003018186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d6020811015611a6a57600080fd5b50516040805163b53afda760e01b81526001600160a01b03808416600483015291519293509084169163b53afda791602480820192602092909190829003018186803b158015611ab957600080fd5b505afa158015611acd573d6000803e3d6000fd5b505050506040513d6020811015611ae357600080fd5b5051611b25576040805162461bcd60e51b815260206004820152600c60248201526b281d24a72b20a624a22fa62360a11b604482015290519081900360640190fd5b806001600160a01b0316632819cbc2866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b7b57600080fd5b505afa158015611b8f573d6000803e3d6000fd5b505050506040513d6020811015611ba557600080fd5b5051611be6576040805162461bcd60e51b815260206004820152600b60248201526a140e9253959053125117d360aa1b604482015290519081900360640190fd5b604080516313d459fb60e01b81526001600160a01b0389811660048301528681166024830152600160448301529151918416916313d459fb91606480820192602092909190829003018186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d6020811015611c6957600080fd5b5051611cac576040805162461bcd60e51b815260206004820152600d60248201526c281d24a72b20a624a22fa2262360991b604482015290519081900360640190fd5b6001600160a01b03808616600090815260208a8152604080832088851684529091529020541680611d9757846001600160a01b03166319eb783a876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b505050506040513d6020811015611d5957600080fd5b50516001600160a01b03878116600090815260208c815260408083208a85168452909152902080546001600160a01b03191691831691909117905590505b604080516306a8df3b60e21b81526001600160a01b038881166004830152838116602483015260448201879052915191891691631aa37cec9160648082019260009290919082900301818387803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b5050604080516001600160a01b038581168252602082018990528251908b1694507ff62badb063ea4b26543119fa0f194f8c19665e8c9d635362e24e7681d6cfb6af93509081900390910190a2505050505050505050565b600061159f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125ab565b60008282018381101561159f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f08575060006115a2565b82820282848281611f1557fe5b041461159f5760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b600061159f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612642565b6000808490506000816001600160a01b031663f8b2cb4f866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d602081101561201c57600080fd5b505160408051634a46c67360e11b81526001600160a01b03888116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d602081101561209857600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156120e057600080fd5b505afa1580156120f4573d6000803e3d6000fd5b505050506040513d602081101561210a57600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156121c457600080fd5b505afa1580156121d8573d6000803e3d6000fd5b505050506040513d60208110156121ee57600080fd5b505160408051634494c00960e11b815260048101889052602481018790526044810186905260648101859052608481018b905260a4810183905290519192506000916001600160a01b0389169163892980129160c4808301926020929190829003018186803b15801561226057600080fd5b505afa158015612274573d6000803e3d6000fd5b505050506040513d602081101561228a57600080fd5b505160408051634c97154960e11b8152905191925060009161231e91670de0b6b3a764000091610f6c916001600160a01b038d169163992e2a9291600480820192602092909190829003018186803b1580156122e557600080fd5b505afa1580156122f9573d6000803e3d6000fd5b505050506040513d602081101561230f57600080fd5b50518a9063ffffffff611ef916565b90508082111561232e5780612330565b815b9c9b505050505050505050505050565b600081612381576040805162461bcd60e51b815260206004820152600a602482015269503a4449565f5a45524f60b01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806123a95750670de0b6b3a76400008482816123a657fe5b04145b6123eb576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b60028304810181811015612437576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b83818161244057fe5b0495945050505050565b600061107f846001600160a01b03166316345f18856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124a557600080fd5b505afa1580156124b9573d6000803e3d6000fd5b505050506040513d60208110156124cf57600080fd5b50516040805163313ce56760e01b81529051610f6c916001600160a01b0388169163313ce56791600480820192602092909190829003018186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d602081101561254057600080fd5b5051600a0a6112a2866305f5e10063ffffffff611ef916565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e5590849061269d565b6000818484111561263a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125ff5781810151838201526020016125e7565b50505050905090810190601f16801561262c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836126915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125ff5781810151838201526020016125e7565b50600083858161244057fe5b60606126f2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661274e9092919063ffffffff16565b805190915015610e555780806020019051602081101561271157600080fd5b5051610e555760405162461bcd60e51b815260040180806020018281038252602a815260200180612902602a913960400191505060405180910390fd5b606061107f84846000858561276285612874565b6127b3576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106127f25780518252601f1990920191602091820191016127d3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612854576040519150601f19603f3d011682016040523d82523d6000602084013e612859565b606091505b509150915061286982828661287a565b979650505050505050565b3b151590565b60608315612889575081611082565b8251156128995782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156125ff5781810151838201526020016125e756fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220c57b33e7848f41bbb0a172b25e3c16f58cf12129049b0cf6d481ff1e8260c15664736f6c634300060b0033",
              "opcodes": "PUSH2 0x2961 PUSH2 0x26 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x19 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x115 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x681CB10A GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xABBEDB40 GT PUSH2 0x7B JUMPI DUP1 PUSH4 0xABBEDB40 EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0xBF36F0E9 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0xEE7375BE EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xFBECB171 EQ PUSH2 0x4E5 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x681CB10A EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x6A146024 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x767F5038 EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0xA89D5DDB EQ PUSH2 0x3AA JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x297E7BF7 GT PUSH2 0xE8 JUMPI DUP1 PUSH4 0x297E7BF7 EQ PUSH2 0x219 JUMPI DUP1 PUSH4 0x33A581D2 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x3FAA6C5D EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x4119BDFA EQ PUSH2 0x2B9 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x715B090 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x14985168 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0x1B4C9031 EQ PUSH2 0x1E3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x53E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x9E0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1CD PUSH2 0xDB3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xDB8 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xE5A JUMP JUMPDEST PUSH2 0x259 PUSH2 0xF3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x293 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP2 ADD CALLDATALOAD PUSH2 0x100 DUP3 ADD CALLDATALOAD PUSH2 0xF40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0xFF1 JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x1089 JUMP JUMPDEST PUSH2 0x259 PUSH2 0x12BC JUMP JUMPDEST PUSH2 0x37F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x12C8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x1374 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x151D JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x157D JUMP JUMPDEST PUSH2 0x48E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x15A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x192D JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x40 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x1993 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP5 DUP2 PUSH2 0x54F DUP3 DUP11 DUP11 PUSH2 0xFF1 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF2D5D56B ADDRESS DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x645 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH4 0x2C96748 DUP13 DUP11 DUP7 LT ISZERO PUSH2 0x757 JUMPI DUP6 PUSH2 0x759 JUMP JUMPDEST DUP11 JUMPDEST DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x836 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x84C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP PUSH2 0x860 DUP2 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP12 DUP9 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x972 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x93A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x964 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP5 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xBCD01BE7 DUP9 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x434A88C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD DUP6 SWAP3 DUP9 AND SWAP2 PUSH4 0x8695118A SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xA9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x140E9253959053125117D3125457D054D4D155 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2710 PUSH2 0xAB0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST GT ISZERO PUSH2 0xAF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A494E56414C49445F46454553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x72A22D71 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP1 ISZERO PUSH2 0xC63 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA0530946 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE MLOAD PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC4A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xCED JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xD5A JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8D4E4083 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A494E56414C49445F42414C414E4345525F504F4F4C000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D24A72B20A624A22FA922A1A2A4AB22A9 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x281D24A72B20A624A22FA1AAA9AA27A224A0A7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x503A494E5355465F42414C414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0xF84 PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH2 0x2710 PUSH2 0xF6C DUP11 DUP13 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1F52 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST SWAP4 POP PUSH2 0xF98 PUSH2 0x2710 PUSH2 0xF6C DUP8 DUP11 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST SWAP3 POP PUSH2 0xFB4 PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH1 0x80 DUP12 ADD CALLDATALOAD PUSH2 0x1E9F JUMP JUMPDEST SWAP2 POP PUSH2 0xFE6 DUP4 PUSH2 0xFDA PUSH2 0xFCF PUSH2 0x2710 PUSH2 0xF6C DUP12 DUP14 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST PUSH1 0x20 DUP12 ADD CALLDATALOAD SWAP1 PUSH2 0x1E5D JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP1 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 DUP5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1062 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1F94 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x116D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF8B2CB4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH4 0xF8B2CB4F SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF1B8A9B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP8 AND SWAP2 PUSH4 0xF1B8A9B7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x127B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x12AE PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C PUSH2 0x1298 DUP6 DUP6 PUSH2 0x2340 JUMP JUMPDEST PUSH2 0x12A2 DUP9 DUP9 PUSH2 0x2340 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x133F DUP11 DUP10 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3106374C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x130E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1322 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x244A JUMP JUMPDEST SWAP5 POP PUSH2 0x134E DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x15A8 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x135F DUP10 DUP10 DUP10 DUP10 PUSH2 0x192D JUMP JUMPDEST SWAP4 POP DUP2 DUP2 LT ISZERO SWAP3 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1421 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x281D2727AA2FA3A7AB PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x144B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST PUSH2 0x148E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x281D24A72B20A624A22FAA27A5A2A7 PUSH1 0x89 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0xE55 SWAP2 CALLER SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1504 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2559 AND JUMP JUMPDEST PUSH2 0x1529 DUP4 DUP3 PUSH1 0x64 PUSH2 0x244A JUMP JUMPDEST DUP3 GT ISZERO PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A5052494E434950414C5F4F55545354414E44494E47000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C DUP6 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1698 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1768 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x177C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x82F652AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x82F652AD SWAP2 PUSH1 0xC4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1888 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x189E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP11 POP SWAP1 DUP13 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1901 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP8 SWAP14 SWAP8 SWAP13 POP SWAP7 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x198A DUP6 DUP6 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3526CE3 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0xD49B38C SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xB53AFDA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP5 AND SWAP2 PUSH4 0xB53AFDA7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ACD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1B25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x281D24A72B20A624A22FA623 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2819CBC2 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1BE6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x140E9253959053125117D3 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP5 AND SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1CAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x281D24A72B20A624A22FA22623 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x1D97 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x19EB783A DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x6A8DF3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP8 SWAP1 MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x1AA37CEC SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E05 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD SWAP1 DUP12 AND SWAP5 POP PUSH32 0xF62BADB063EA4B26543119FA0F194F8C19665E8C9D635362E24E7681D6CFB6AF SWAP4 POP SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x25AB JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x159F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F08 JUMPI POP PUSH1 0x0 PUSH2 0x15A2 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1F15 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x159F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x28E1 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x2642 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2006 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x201C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x206E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2082 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x210A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2166 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4494C009 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x89298012 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2274 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x228A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4C971549 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x231E SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP2 PUSH4 0x992E2A92 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP11 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x232E JUMPI DUP1 PUSH2 0x2330 JUMP JUMPDEST DUP2 JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2381 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x503A4449565F5A45524F PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 MUL DUP4 ISZERO DUP1 PUSH2 0x23A9 JUMPI POP PUSH8 0xDE0B6B3A7640000 DUP5 DUP3 DUP2 PUSH2 0x23A6 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x23EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP4 DIV DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x2437 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 DUP2 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16345F18 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x252A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2540 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA EXP PUSH2 0x12A2 DUP7 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xE55 SWAP1 DUP5 SWAP1 PUSH2 0x269D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x263A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x262C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2691 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST PUSH1 0x60 PUSH2 0x26F2 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0xE55 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2711 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xE55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2902 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x107F DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x2762 DUP6 PUSH2 0x2874 JUMP JUMPDEST PUSH2 0x27B3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x27F2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27D3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2854 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2859 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2869 DUP3 DUP3 DUP7 PUSH2 0x287A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2889 JUMPI POP DUP2 PUSH2 0x1082 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x2899 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77536166654552433230 GASPRICE KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x756363656564A2646970667358221220C57B33E7 DUP5 DUP16 COINBASE 0xBB 0xB0 LOG1 PUSH19 0xB25E3C16F58CF12129049B0CF6D481FF1E8260 0xC1 JUMP PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "148338:22302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600436106101155760003560e01c8063681cb10a116100ac578063abbedb401161007b578063abbedb40146103ef578063bf36f0e914610425578063c374682514610448578063ee7375be146104a7578063fbecb171146104e557610115565b8063681cb10a146102f15780636a1460241461032f578063767f503814610337578063a89d5ddb146103aa57610115565b8063297e7bf7116100e8578063297e7bf71461021957806333a581d2146102515780633faa6c5d1461026b5780634119bdfa146102b957610115565b80630715b0901461011a5780631498516814610181578063174a5be4146101c55780631b4c9031146101e3575b600080fd5b81801561012657600080fd5b506101636004803603608081101561013d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561053e565b60408051938452602084019290925282820152519081900360600190f35b6101c3600480360360a081101561019757600080fd5b506001600160a01b038135811691602081013582169160408201351690606081013590608001356109e0565b005b6101cd610db3565b6040805160ff9092168252519081900360200190f35b6101c3600480360360608110156101f957600080fd5b506001600160a01b03813581169160208101359091169060400135610db8565b6101c36004803603608081101561022f57600080fd5b506001600160a01b038135169060208101359060408101359060600135610e5a565b610259610f3a565b60408051918252519081900360200190f35b610293600480360361012081101561028257600080fd5b5060e0810135610100820135610f40565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610259600480360360608110156102cf57600080fd5b506001600160a01b038135811691602081013582169160409091013516610ff1565b6102596004803603608081101561030757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611089565b6102596112bc565b61037f600480360360a081101561034d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608090910135166112c8565b6040805195865260208601949094529115158484015260608401526080830152519081900360a00190f35b8180156103b657600080fd5b506101c3600480360360608110156103cd57600080fd5b506001600160a01b038135811691602081013582169160409091013516611374565b6101c36004803603606081101561040557600080fd5b506001600160a01b0381358116916020810135916040909101351661151d565b6102596004803603604081101561043b57600080fd5b508035906020013561157d565b61048e600480360360a081101561045e57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013590911690608001356115a8565b6040805192835260208301919091528051918290030190f35b610259600480360360808110156104bd57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606001351661192d565b8180156104f157600080fd5b506101c3600480360360c081101561050857600080fd5b508035906001600160a01b0360208201358116916040810135821691606082013581169160808101359091169060a00135611993565b60008080848161054f828a8a610ff1565b9050876001600160a01b031663f2d5d56b30846001600160a01b03166370a082318c6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156105b757600080fd5b505afa1580156105cb573d6000803e3d6000fd5b505050506040513d60208110156105e157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051600093506001600160a01b038d1692506370a0823191602480820192602092909190829003018186803b15801561069357600080fd5b505afa1580156106a7573d6000803e3d6000fd5b505050506040513d60208110156106bd57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561070b57600080fd5b505afa15801561071f573d6000803e3d6000fd5b505050506040513d602081101561073557600080fd5b505190506001600160a01b0384166302c967488c8a8610156107575785610759565b8a5b846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050506040513d60208110156107da57600080fd5b5050604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561082257600080fd5b505afa158015610836573d6000803e3d6000fd5b505050506040513d602081101561084c57600080fd5b50519550610860818763ffffffff611e5d16565b9650836001600160a01b031663a9059cbb8b886040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108c257600080fd5b505af11580156108d6573d6000803e3d6000fd5b505050506040513d60208110156108ec57600080fd5b5050604080516370a0823160e01b815230600482015290516109729184916001600160a01b038f16916370a08231916024808301926020929190829003018186803b15801561093a57600080fd5b505afa15801561094e573d6000803e3d6000fd5b505050506040513d602081101561096457600080fd5b50519063ffffffff611e5d16565b9450896001600160a01b031663bcd01be7886040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50505050505050509450945094915050565b6040805163434a88c560e11b81526001600160a01b03868116600483015291518592881691638695118a916024808301926020929190829003018186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d6020811015610a5457600080fd5b5051610a9d576040805162461bcd60e51b8152602060048201526013602482015272140e9253959053125117d3125457d054d4d155606a1b604482015290519081900360640190fd5b612710610ab0848463ffffffff611e9f16565b1115610af4576040805162461bcd60e51b815260206004820152600e60248201526d503a494e56414c49445f4645455360901b604482015290519081900360640190fd5b856001600160a01b03166372a22d71856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610b4a57600080fd5b505afa158015610b5e573d6000803e3d6000fd5b505050506040513d6020811015610b7457600080fd5b50518015610c635750806001600160a01b0316632f37b624876001600160a01b031663a05309466040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc557600080fd5b505afa158015610bd9573d6000803e3d6000fd5b505050506040513d6020811015610bef57600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b039092166004830152516024808301926020929190829003018186803b158015610c3657600080fd5b505afa158015610c4a573d6000803e3d6000fd5b505050506040513d6020811015610c6057600080fd5b50515b8015610ced5750806001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610cc057600080fd5b505afa158015610cd4573d6000803e3d6000fd5b505050506040513d6020811015610cea57600080fd5b50515b8015610d5a5750806001600160a01b0316638d4e40836040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2d57600080fd5b505afa158015610d41573d6000803e3d6000fd5b505050506040513d6020811015610d5757600080fd5b50515b610dab576040805162461bcd60e51b815260206004820152601760248201527f503a494e56414c49445f42414c414e4345525f504f4f4c000000000000000000604482015290519081900360640190fd5b505050505050565b600181565b826001600160a01b0316826001600160a01b031614610e13576040805162461bcd60e51b8152602060048201526012602482015271281d24a72b20a624a22fa922a1a2a4ab22a960711b604482015290519081900360640190fd5b80610e55576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b505050565b6001600160a01b038416610eab576040805162461bcd60e51b8152602060048201526013602482015272281d24a72b20a624a22fa1aaa9aa27a224a0a760691b604482015290519081900360640190fd5b82610eed576040805162461bcd60e51b815260206004820152600d60248201526c140e9253959053125117d05355609a1b604482015290519081900360640190fd5b80821115610f34576040805162461bcd60e51b815260206004820152600f60248201526e503a494e5355465f42414c414e434560881b604482015290519081900360640190fd5b50505050565b60001981565b6000808080610f846060880135610f78612710610f6c8a8c60015b60200201359063ffffffff611ef916565b9063ffffffff611f5216565b9063ffffffff611e9f16565b9350610f98612710610f6c878a6001610f5b565b9250610fb460a0880135610f7860408a013560808b0135611e9f565b9150610fe683610fda610fcf612710610f6c8b8d6001610f5b565b60208b013590611e5d565b9063ffffffff611e5d16565b905093509350935093565b600061107f8484866001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b5051611f94565b90505b9392505050565b6000808590506000836001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156110e757600080fd5b505afa1580156110fb573d6000803e3d6000fd5b505050506040513d602081101561111157600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038a16916318160ddd916004808301926020929190829003018186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d602081101561118357600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b038a8116600483015291519293506000929186169163f8b2cb4f91602480820192602092909190829003018186803b1580156111d557600080fd5b505afa1580156111e9573d6000803e3d6000fd5b505050506040513d60208110156111ff57600080fd5b50516040805163f1b8a9b760e01b81526001600160a01b038b8116600483015291519293506000929187169163f1b8a9b791602480820192602092909190829003018186803b15801561125157600080fd5b505afa158015611265573d6000803e3d6000fd5b505050506040513d602081101561127b57600080fd5b505190506112ae670de0b6b3a7640000610f6c6112988585612340565b6112a28888612340565b9063ffffffff611ef916565b9a9950505050505050505050565b670de0b6b3a764000081565b600080600080600061133f8a898c6001600160a01b0316633106374c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d602081101561133857600080fd5b505161244a565b945061134e89898989896115a8565b909250905061135f8989898961192d565b93508181101592509550955095509550959050565b806001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ad57600080fd5b505afa1580156113c1573d6000803e3d6000fd5b505050506040513d60208110156113d757600080fd5b50516001600160a01b03163314611421576040805162461bcd60e51b8152602060048201526009602482015268281d2727aa2fa3a7ab60b91b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161415801561144b57506001600160a01b03831615155b61148e576040805162461bcd60e51b815260206004820152600f60248201526e281d24a72b20a624a22faa27a5a2a760891b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051610e559133916001600160a01b038716916370a08231916024808301926020929190829003018186803b1580156114da57600080fd5b505afa1580156114ee573d6000803e3d6000fd5b505050506040513d602081101561150457600080fd5b50516001600160a01b038616919063ffffffff61255916565b6115298382606461244a565b821115610e55576040805162461bcd60e51b815260206004820152601760248201527f503a5052494e434950414c5f4f55545354414e44494e47000000000000000000604482015290519081900360640190fd5b600061159f670de0b6b3a7640000610f6c85600a86900a63ffffffff611ef916565b90505b92915050565b60008060008790506000816001600160a01b031663f8b2cb4f896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561160857600080fd5b505afa15801561161c573d6000803e3d6000fd5b505050506040513d602081101561163257600080fd5b505160408051634a46c67360e11b81526001600160a01b038b8116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d60208110156116ae57600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d602081101561172057600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561176857600080fd5b505afa15801561177c573d6000803e3d6000fd5b505050506040513d602081101561179257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117da57600080fd5b505afa1580156117ee573d6000803e3d6000fd5b505050506040513d602081101561180457600080fd5b5051604080516382f652ad60e01b815260048101889052602481018790526044810186905260648101859052608481018c905260a4810183905290519192506001600160a01b038816916382f652ad9160c480820192602092909190829003018186803b15801561187457600080fd5b505afa158015611888573d6000803e3d6000fd5b505050506040513d602081101561189e57600080fd5b5051604080516370a0823160e01b81526001600160a01b038e811660048301529151929a50908c16916370a0823191602480820192602092909190829003018186803b1580156118ed57600080fd5b505afa158015611901573d6000803e3d6000fd5b505050506040513d602081101561191757600080fd5b5051979d979c50969a5050505050505050505050565b600061198a8585846001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561104e57600080fd5b95945050505050565b6000856001600160a01b031663c31245256040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b5051604080516303526ce360e21b815290519192506000916001600160a01b03871691630d49b38c916004808301926020929190829003018186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d6020811015611a6a57600080fd5b50516040805163b53afda760e01b81526001600160a01b03808416600483015291519293509084169163b53afda791602480820192602092909190829003018186803b158015611ab957600080fd5b505afa158015611acd573d6000803e3d6000fd5b505050506040513d6020811015611ae357600080fd5b5051611b25576040805162461bcd60e51b815260206004820152600c60248201526b281d24a72b20a624a22fa62360a11b604482015290519081900360640190fd5b806001600160a01b0316632819cbc2866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b7b57600080fd5b505afa158015611b8f573d6000803e3d6000fd5b505050506040513d6020811015611ba557600080fd5b5051611be6576040805162461bcd60e51b815260206004820152600b60248201526a140e9253959053125117d360aa1b604482015290519081900360640190fd5b604080516313d459fb60e01b81526001600160a01b0389811660048301528681166024830152600160448301529151918416916313d459fb91606480820192602092909190829003018186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d6020811015611c6957600080fd5b5051611cac576040805162461bcd60e51b815260206004820152600d60248201526c281d24a72b20a624a22fa2262360991b604482015290519081900360640190fd5b6001600160a01b03808616600090815260208a8152604080832088851684529091529020541680611d9757846001600160a01b03166319eb783a876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b505050506040513d6020811015611d5957600080fd5b50516001600160a01b03878116600090815260208c815260408083208a85168452909152902080546001600160a01b03191691831691909117905590505b604080516306a8df3b60e21b81526001600160a01b038881166004830152838116602483015260448201879052915191891691631aa37cec9160648082019260009290919082900301818387803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b5050604080516001600160a01b038581168252602082018990528251908b1694507ff62badb063ea4b26543119fa0f194f8c19665e8c9d635362e24e7681d6cfb6af93509081900390910190a2505050505050505050565b600061159f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125ab565b60008282018381101561159f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611f08575060006115a2565b82820282848281611f1557fe5b041461159f5760405162461bcd60e51b81526004018080602001828103825260218152602001806128e16021913960400191505060405180910390fd5b600061159f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612642565b6000808490506000816001600160a01b031663f8b2cb4f866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611ff257600080fd5b505afa158015612006573d6000803e3d6000fd5b505050506040513d602081101561201c57600080fd5b505160408051634a46c67360e11b81526001600160a01b03888116600483015291519293506000929185169163948d8ce691602480820192602092909190829003018186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d602081101561209857600080fd5b5051604080516318160ddd60e01b815290519192506000916001600160a01b038616916318160ddd916004808301926020929190829003018186803b1580156120e057600080fd5b505afa1580156120f4573d6000803e3d6000fd5b505050506040513d602081101561210a57600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0387169163936c3477916004808301926020929190829003018186803b15801561215257600080fd5b505afa158015612166573d6000803e3d6000fd5b505050506040513d602081101561217c57600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156121c457600080fd5b505afa1580156121d8573d6000803e3d6000fd5b505050506040513d60208110156121ee57600080fd5b505160408051634494c00960e11b815260048101889052602481018790526044810186905260648101859052608481018b905260a4810183905290519192506000916001600160a01b0389169163892980129160c4808301926020929190829003018186803b15801561226057600080fd5b505afa158015612274573d6000803e3d6000fd5b505050506040513d602081101561228a57600080fd5b505160408051634c97154960e11b8152905191925060009161231e91670de0b6b3a764000091610f6c916001600160a01b038d169163992e2a9291600480820192602092909190829003018186803b1580156122e557600080fd5b505afa1580156122f9573d6000803e3d6000fd5b505050506040513d602081101561230f57600080fd5b50518a9063ffffffff611ef916565b90508082111561232e5780612330565b815b9c9b505050505050505050505050565b600081612381576040805162461bcd60e51b815260206004820152600a602482015269503a4449565f5a45524f60b01b604482015290519081900360640190fd5b670de0b6b3a764000083028315806123a95750670de0b6b3a76400008482816123a657fe5b04145b6123eb576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b60028304810181811015612437576040805162461bcd60e51b815260206004820152600e60248201526d140e91125597d25395115493905360921b604482015290519081900360640190fd5b83818161244057fe5b0495945050505050565b600061107f846001600160a01b03166316345f18856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124a557600080fd5b505afa1580156124b9573d6000803e3d6000fd5b505050506040513d60208110156124cf57600080fd5b50516040805163313ce56760e01b81529051610f6c916001600160a01b0388169163313ce56791600480820192602092909190829003018186803b15801561251657600080fd5b505afa15801561252a573d6000803e3d6000fd5b505050506040513d602081101561254057600080fd5b5051600a0a6112a2866305f5e10063ffffffff611ef916565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610e5590849061269d565b6000818484111561263a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125ff5781810151838201526020016125e7565b50505050905090810190601f16801561262c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836126915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156125ff5781810151838201526020016125e7565b50600083858161244057fe5b60606126f2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661274e9092919063ffffffff16565b805190915015610e555780806020019051602081101561271157600080fd5b5051610e555760405162461bcd60e51b815260040180806020018281038252602a815260200180612902602a913960400191505060405180910390fd5b606061107f84846000858561276285612874565b6127b3576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106127f25780518252601f1990920191602091820191016127d3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612854576040519150601f19603f3d011682016040523d82523d6000602084013e612859565b606091505b509150915061286982828661287a565b979650505050505050565b3b151590565b60608315612889575081611082565b8251156128995782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156125ff5781810151838201526020016125e756fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220c57b33e7848f41bbb0a172b25e3c16f58cf12129049b0cf6d481ff1e8260c15664736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x115 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x681CB10A GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xABBEDB40 GT PUSH2 0x7B JUMPI DUP1 PUSH4 0xABBEDB40 EQ PUSH2 0x3EF JUMPI DUP1 PUSH4 0xBF36F0E9 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xC3746825 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0xEE7375BE EQ PUSH2 0x4A7 JUMPI DUP1 PUSH4 0xFBECB171 EQ PUSH2 0x4E5 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x681CB10A EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x6A146024 EQ PUSH2 0x32F JUMPI DUP1 PUSH4 0x767F5038 EQ PUSH2 0x337 JUMPI DUP1 PUSH4 0xA89D5DDB EQ PUSH2 0x3AA JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x297E7BF7 GT PUSH2 0xE8 JUMPI DUP1 PUSH4 0x297E7BF7 EQ PUSH2 0x219 JUMPI DUP1 PUSH4 0x33A581D2 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x3FAA6C5D EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x4119BDFA EQ PUSH2 0x2B9 JUMPI PUSH2 0x115 JUMP JUMPDEST DUP1 PUSH4 0x715B090 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x14985168 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x174A5BE4 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0x1B4C9031 EQ PUSH2 0x1E3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x163 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x53E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x9E0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1CD PUSH2 0xDB3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xDB8 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x22F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0xE5A JUMP JUMPDEST PUSH2 0x259 PUSH2 0xF3A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x293 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH2 0x120 DUP2 LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP2 ADD CALLDATALOAD PUSH2 0x100 DUP3 ADD CALLDATALOAD PUSH2 0xF40 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0xFF1 JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x1089 JUMP JUMPDEST PUSH2 0x259 PUSH2 0x12BC JUMP JUMPDEST PUSH2 0x37F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x12C8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP2 ISZERO ISZERO DUP5 DUP5 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0xA0 ADD SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x1374 JUMP JUMPDEST PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x405 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH1 0x40 SWAP1 SWAP2 ADD CALLDATALOAD AND PUSH2 0x151D JUMP JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x43B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x157D JUMP JUMPDEST PUSH2 0x48E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x45E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x15A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB ADD SWAP1 RETURN JUMPDEST PUSH2 0x259 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x60 ADD CALLDATALOAD AND PUSH2 0x192D JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C3 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x40 DUP2 ADD CALLDATALOAD DUP3 AND SWAP2 PUSH1 0x60 DUP3 ADD CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0xA0 ADD CALLDATALOAD PUSH2 0x1993 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP5 DUP2 PUSH2 0x54F DUP3 DUP11 DUP11 PUSH2 0xFF1 JUMP JUMPDEST SWAP1 POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF2D5D56B ADDRESS DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP13 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP7 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH1 0x44 DUP1 DUP4 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x631 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x645 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x70B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x71F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH4 0x2C96748 DUP13 DUP11 DUP7 LT ISZERO PUSH2 0x757 JUMPI DUP6 PUSH2 0x759 JUMP JUMPDEST DUP11 JUMPDEST DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x836 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x84C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP6 POP PUSH2 0x860 DUP2 DUP8 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP7 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP12 DUP9 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8D6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0x972 SWAP2 DUP5 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x93A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x964 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP5 POP DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xBCD01BE7 DUP9 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 POP SWAP5 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x434A88C5 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD DUP6 SWAP3 DUP9 AND SWAP2 PUSH4 0x8695118A SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xA9D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x140E9253959053125117D3125457D054D4D155 PUSH1 0x6A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x2710 PUSH2 0xAB0 DUP5 DUP5 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST GT ISZERO PUSH2 0xAF4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x503A494E56414C49445F46454553 PUSH1 0x90 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x72A22D71 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP1 ISZERO PUSH2 0xC63 JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA0530946 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE MLOAD PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC4A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xCED JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2F37B624 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xCEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST DUP1 ISZERO PUSH2 0xD5A JUMPI POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8D4E4083 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD JUMPDEST PUSH2 0xDAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A494E56414C49445F42414C414E4345525F504F4F4C000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 JUMP JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0xE13 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH18 0x281D24A72B20A624A22FA922A1A2A4AB22A9 PUSH1 0x71 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xEAB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH19 0x281D24A72B20A624A22FA1AAA9AA27A224A0A7 PUSH1 0x69 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP3 PUSH2 0xEED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x140E9253959053125117D05355 PUSH1 0x9A SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xF34 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x503A494E5355465F42414C414E4345 PUSH1 0x88 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 PUSH2 0xF84 PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH2 0x2710 PUSH2 0xF6C DUP11 DUP13 PUSH1 0x1 JUMPDEST PUSH1 0x20 MUL ADD CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1F52 AND JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E9F AND JUMP JUMPDEST SWAP4 POP PUSH2 0xF98 PUSH2 0x2710 PUSH2 0xF6C DUP8 DUP11 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST SWAP3 POP PUSH2 0xFB4 PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0xF78 PUSH1 0x40 DUP11 ADD CALLDATALOAD PUSH1 0x80 DUP12 ADD CALLDATALOAD PUSH2 0x1E9F JUMP JUMPDEST SWAP2 POP PUSH2 0xFE6 DUP4 PUSH2 0xFDA PUSH2 0xFCF PUSH2 0x2710 PUSH2 0xF6C DUP12 DUP14 PUSH1 0x1 PUSH2 0xF5B JUMP JUMPDEST PUSH1 0x20 DUP12 ADD CALLDATALOAD SWAP1 PUSH2 0x1E5D JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1E5D AND JUMP JUMPDEST SWAP1 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 DUP5 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1062 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1F94 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1159 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x116D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF8B2CB4F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH4 0xF8B2CB4F SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xF1B8A9B7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP8 AND SWAP2 PUSH4 0xF1B8A9B7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1265 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x127B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x12AE PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C PUSH2 0x1298 DUP6 DUP6 PUSH2 0x2340 JUMP JUMPDEST PUSH2 0x12A2 DUP9 DUP9 PUSH2 0x2340 JUMP JUMPDEST SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x133F DUP11 DUP10 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x3106374C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x130E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1322 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1338 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x244A JUMP JUMPDEST SWAP5 POP PUSH2 0x134E DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x15A8 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x135F DUP10 DUP10 DUP10 DUP10 PUSH2 0x192D JUMP JUMPDEST SWAP4 POP DUP2 DUP2 LT ISZERO SWAP3 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC340A24 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x13AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x13D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1421 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x281D2727AA2FA3A7AB PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x144B JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO JUMPDEST PUSH2 0x148E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH15 0x281D24A72B20A624A22FAA27A5A2A7 PUSH1 0x89 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 MLOAD PUSH2 0xE55 SWAP2 CALLER SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x14DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1504 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x2559 AND JUMP JUMPDEST PUSH2 0x1529 DUP4 DUP3 PUSH1 0x64 PUSH2 0x244A JUMP JUMPDEST DUP3 GT ISZERO PUSH2 0xE55 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x503A5052494E434950414C5F4F55545354414E44494E47000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F PUSH8 0xDE0B6B3A7640000 PUSH2 0xF6C DUP6 PUSH1 0xA DUP7 SWAP1 EXP PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP10 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1632 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1698 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x16AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1768 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x177C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1792 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x82F652AD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP13 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x82F652AD SWAP2 PUSH1 0xC4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1888 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x189E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP11 POP SWAP1 DUP13 AND SWAP2 PUSH4 0x70A08231 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1901 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP8 SWAP14 SWAP8 SWAP13 POP SWAP7 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x198A DUP6 DUP6 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x104E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xC3124525 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x19CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x19F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x3526CE3 PUSH1 0xE2 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0xD49B38C SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xB53AFDA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP SWAP1 DUP5 AND SWAP2 PUSH4 0xB53AFDA7 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1AB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1ACD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1AE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1B25 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xC PUSH1 0x24 DUP3 ADD MSTORE PUSH12 0x281D24A72B20A624A22FA623 PUSH1 0xA1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2819CBC2 DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1BE6 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xB PUSH1 0x24 DUP3 ADD MSTORE PUSH11 0x140E9253959053125117D3 PUSH1 0xAA SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x13D459FB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x44 DUP4 ADD MSTORE SWAP2 MLOAD SWAP2 DUP5 AND SWAP2 PUSH4 0x13D459FB SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x1CAC JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH13 0x281D24A72B20A624A22FA22623 PUSH1 0x99 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP9 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD AND DUP1 PUSH2 0x1D97 JUMPI DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x19EB783A DUP8 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1D59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP11 DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 DUP4 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0x6A8DF3B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP8 SWAP1 MSTORE SWAP2 MLOAD SWAP2 DUP10 AND SWAP2 PUSH4 0x1AA37CEC SWAP2 PUSH1 0x64 DUP1 DUP3 ADD SWAP3 PUSH1 0x0 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP4 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E05 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP3 MLOAD SWAP1 DUP12 AND SWAP5 POP PUSH32 0xF62BADB063EA4B26543119FA0F194F8C19665E8C9D635362E24E7681D6CFB6AF SWAP4 POP SWAP1 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG2 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x25AB JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x159F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1F08 JUMPI POP PUSH1 0x0 PUSH2 0x15A2 JUMP JUMPDEST DUP3 DUP3 MUL DUP3 DUP5 DUP3 DUP2 PUSH2 0x1F15 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x159F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x28E1 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x159F DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x2642 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF8B2CB4F DUP7 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2006 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x201C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4A46C673 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 MLOAD SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 DUP6 AND SWAP2 PUSH4 0x948D8CE6 SWAP2 PUSH1 0x24 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x206E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2082 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2098 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x18160DDD PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP2 PUSH4 0x18160DDD SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x210A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x936C3477 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND SWAP2 PUSH4 0x936C3477 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2166 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x217C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x1A995BED PUSH1 0xE3 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0xD4CADF68 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x21EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4494C009 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP2 ADD DUP12 SWAP1 MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP2 PUSH4 0x89298012 SWAP2 PUSH1 0xC4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2274 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x228A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x4C971549 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH2 0x231E SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND SWAP2 PUSH4 0x992E2A92 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x230F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD DUP11 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x232E JUMPI DUP1 PUSH2 0x2330 JUMP JUMPDEST DUP2 JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2381 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xA PUSH1 0x24 DUP3 ADD MSTORE PUSH10 0x503A4449565F5A45524F PUSH1 0xB0 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 MUL DUP4 ISZERO DUP1 PUSH2 0x23A9 JUMPI POP PUSH8 0xDE0B6B3A7640000 DUP5 DUP3 DUP2 PUSH2 0x23A6 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x23EB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x2 DUP4 DIV DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x2437 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH14 0x140E91125597D253951154939053 PUSH1 0x92 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 DUP2 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107F DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x16345F18 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x24CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0x313CE567 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH2 0xF6C SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND SWAP2 PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x252A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2540 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xA EXP PUSH2 0x12A2 DUP7 PUSH4 0x5F5E100 PUSH4 0xFFFFFFFF PUSH2 0x1EF9 AND JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0xE55 SWAP1 DUP5 SWAP1 PUSH2 0x269D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP5 DUP5 GT ISZERO PUSH2 0x263A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x262C JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH2 0x2691 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP4 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP4 MLOAD SWAP1 SWAP3 DUP4 SWAP3 PUSH1 0x44 SWAP1 SWAP2 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x2440 JUMPI INVALID JUMPDEST PUSH1 0x60 PUSH2 0x26F2 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x274E SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0xE55 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2711 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0xE55 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2902 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x107F DUP5 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x2762 DUP6 PUSH2 0x2874 JUMP JUMPDEST PUSH2 0x27B3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x27F2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x27D3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2854 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2859 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x2869 DUP3 DUP3 DUP7 PUSH2 0x287A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2889 JUMPI POP DUP2 PUSH2 0x1082 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x2899 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 DUP2 MSTORE DUP5 MLOAD PUSH1 0x24 DUP5 ADD MSTORE DUP5 MLOAD DUP6 SWAP4 SWAP2 SWAP3 DUP4 SWAP3 PUSH1 0x44 ADD SWAP2 SWAP1 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 DUP4 ISZERO PUSH2 0x25FF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x25E7 JUMP INVALID MSTORE8 PUSH2 0x6665 0x4D PUSH2 0x7468 GASPRICE KECCAK256 PUSH14 0x756C7469706C69636174696F6E20 PUSH16 0x766572666C6F77536166654552433230 GASPRICE KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x756363656564A2646970667358221220C57B33E7 DUP5 DUP16 COINBASE 0xBB 0xB0 LOG1 PUSH19 0xB25E3C16F58CF12129049B0CF6D481FF1E8260 0xC1 JUMP PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "148338:22302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;152725:1724;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;152725:1724:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;149424:705;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;149424:705:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;148533:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;158520:227;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;158520:227:0;;;;;;;;;;;;;;;;;:::i;159162:336::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;159162:336:0;;;;;;;;;;;;;;;;;;:::i;148426:49::-;;;:::i;:::-;;;;;;;;;;;;;;;;155521:908;;;;;;;;;;;;;;;;-1:-1:-1;155521:908:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;163774:255;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;163774:255:0;;;;;;;;;;;;;;;;;;;:::i;161571:968::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;161571:968:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;148481:46::-;;;:::i;168383:865::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;168383:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;159990:336;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;159990:336:0;;;;;;;;;;;;;;;;;;;:::i;156716:227::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;156716:227:0;;;;;;;;;;;;;;;;;:::i;169565:164::-;;;;;;;;;;;;;;;;-1:-1:-1;169565:164:0;;;;;;;:::i;166188:1146::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;166188:1146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;163057:273;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;163057:273:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;150800:1175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150800:1175:0;;;-1:-1:-1;;;;;150800:1175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;152725:1724::-;152923:18;;;153078:10;152923:18;153249:71;153078:10;153291:14;153308:11;153249:21;:71::i;:::-;153222:98;;153383:11;-1:-1:-1;;;;;153370:30:0;;153409:4;153416:5;-1:-1:-1;;;;;153416:15:0;;153432:11;153416:28;;;;;;;;;;;;;-1:-1:-1;;;;;153416:28:0;-1:-1:-1;;;;;153416:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;153416:28:0;153370:75;;;-1:-1:-1;;;;;;153370:75:0;;;;;;;-1:-1:-1;;;;;153370:75:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;153370:75:0;;;;;;;-1:-1:-1;153370:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;153566:39:0;;;-1:-1:-1;;;153566:39:0;;153599:4;153566:39;;;;;;153531:32;;-1:-1:-1;;;;;;153566:24:0;;;-1:-1:-1;153566:24:0;;:39;;;;;;;;;;;;;;;:24;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;153566:39:0;153650:30;;;-1:-1:-1;;;153650:30:0;;153674:4;153650:30;;;;;;153566:39;;-1:-1:-1;153615:21:0;;-1:-1:-1;;;;;153650:15:0;;;;;:30;;;;;153566:39;;153650:30;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;153650:30:0;;-1:-1:-1;;;;;;153766:29:0;;;153817:14;153846:35;;;;:72;;153902:16;153846:72;;;153884:15;153846:72;153975:13;153766:232;;;;;;;;;;;;;-1:-1:-1;;;;;153766:232:0;-1:-1:-1;;;;;153766:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;154075:30:0;;;-1:-1:-1;;;154075:30:0;;154099:4;154075:30;;;;;;-1:-1:-1;;;;;154075:15:0;;;;;:30;;;;;153766:232;;154075:30;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;154075:30:0;;-1:-1:-1;154132:33:0;:13;154075:30;154132:33;:17;:33;:::i;:::-;154115:50;;154175:5;-1:-1:-1;;;;;154175:14:0;;154190:11;154203:14;154175:43;;;;;;;;;;;;;-1:-1:-1;;;;;154175:43:0;-1:-1:-1;;;;;154175:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;154262:39:0;;;-1:-1:-1;;;154262:39:0;;154295:4;154262:39;;;;;;:69;;154306:24;;-1:-1:-1;;;;;154262:24:0;;;;;:39;;;;;154175:43;;154262:39;;;;;;;:24;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;154262:39:0;;:69;:43;:69;:::i;:::-;154228:103;;154354:11;-1:-1:-1;;;;;154341:38:0;;154380:10;154341:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;152725:1724;;;;;;;;;;;;:::o;149424:705::-;149680:45;;;-1:-1:-1;;;149680:45:0;;-1:-1:-1;;;;;149680:45:0;;;;;;;;;149650:10;;149680:29;;;;;:45;;;;;;;;;;;;;;:29;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149680:45:0;149672:77;;;;;-1:-1:-1;;;149672:77:0;;;;;;;;;;;;-1:-1:-1;;;149672:77:0;;;;;;;;;;;;;;;149798:6;149767:27;:10;149782:11;149767:27;:14;:27;:::i;:::-;:37;;149759:72;;;;;-1:-1:-1;;;149759:72:0;;;;;;;;;;;;-1:-1:-1;;;149759:72:0;;;;;;;;;;;;;;;149862:7;-1:-1:-1;;;;;149862:27:0;;149898:10;149862:48;;;;;;;;;;;;;-1:-1:-1;;;;;149862:48:0;-1:-1:-1;;;;;149862:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149862:48:0;:92;;;;;149926:5;-1:-1:-1;;;;;149926:13:0;;149940:7;-1:-1:-1;;;;;149940:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149940:13:0;149926:28;;;-1:-1:-1;;;;;;149926:28:0;;;;;;;-1:-1:-1;;;;;149926:28:0;;;;;;;;;;;;;149940:13;;149926:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149926:28:0;149862:92;:157;;;;;149990:5;-1:-1:-1;;;;;149990:13:0;;150004:14;149990:29;;;;;;;;;;;;;-1:-1:-1;;;;;149990:29:0;-1:-1:-1;;;;;149990:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;149990:29:0;149862:157;:211;;;;;150054:5;-1:-1:-1;;;;;150054:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;150054:19:0;149862:211;149841:281;;;;;-1:-1:-1;;;149841:281:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;149424:705;;;;;;:::o;148533:39::-;148571:1;148533:39;:::o;158520:227::-;158635:4;-1:-1:-1;;;;;158629:10:0;:2;-1:-1:-1;;;;;158629:10:0;;158621:57;;;;;-1:-1:-1;;;158621:57:0;;;;;;;;;;;;-1:-1:-1;;;158621:57:0;;;;;;;;;;;;;;;158696:20;158688:52;;;;;-1:-1:-1;;;158688:52:0;;;;;;;;;;;;-1:-1:-1;;;158688:52:0;;;;;;;;;;;;;;;158520:227;;;:::o;159162:336::-;-1:-1:-1;;;;;159312:23:0;;159304:59;;;;;-1:-1:-1;;;159304:59:0;;;;;;;;;;;;-1:-1:-1;;;159304:59:0;;;;;;;;;;;;;;;159381:23;159373:53;;;;;-1:-1:-1;;;159373:53:0;;;;;;;;;;;;-1:-1:-1;;;159373:53:0;;;;;;;;;;;;;;;159465:6;159444:17;:27;;159436:55;;;;;-1:-1:-1;;;159436:55:0;;;;;;;;;;;;-1:-1:-1;;;159436:55:0;;;;;;;;;;;;;;;159162:336;;;;:::o;148426:49::-;-1:-1:-1;;148426:49:0;:::o;155521:908::-;155718:27;;;;155903:59;155949:12;;;;155903:41;155937:6;155903:29;155920:11;155949:9;155913:1;155903:12;;;;;;:29;:16;:29;:::i;:::-;:33;:41;:33;:41;:::i;:::-;:45;:59;:45;:59;:::i;:::-;155881:81;-1:-1:-1;156042:40:0;156075:6;156042:28;156059:10;156042:9;156052:1;156042:12;;:40;156020:62;-1:-1:-1;156166:48:0;156201:12;;;;156166:30;:12;;;;156183;;;;156166:16;:30::i;:48::-;156149:65;-1:-1:-1;156317:83:0;156381:18;156317:59;156334:41;156368:6;156334:29;156351:11;156334:9;156344:1;156334:12;;:41;156317:12;;;;;:16;:59::i;:::-;:63;:83;:63;:83;:::i;:::-;156300:100;;155521:908;;;;;;;:::o;163774:255::-;163917:7;163943:79;163960:6;163968:14;163991:6;-1:-1:-1;;;;;163984:24:0;;164009:11;163984:37;;;;;;;;;;;;;-1:-1:-1;;;;;163984:37:0;-1:-1:-1;;;;;163984:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;163984:37:0;163943:16;:79::i;:::-;163936:86;;163774:255;;;;;;:::o;161571:968::-;161725:7;161744:12;161766:6;161744:29;;162007:23;162046:11;-1:-1:-1;;;;;162039:29:0;;162069:6;162039:37;;;;;;;;;;;;;-1:-1:-1;;;;;162039:37:0;-1:-1:-1;;;;;162039:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162039:37:0;162118:28;;;-1:-1:-1;;;162118:28:0;;;;162039:37;;-1:-1:-1;162086:22:0;;-1:-1:-1;;;;;162118:26:0;;;;;:28;;;;;162039:37;;162118:28;;;;;;;:26;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162118:28:0;162188:32;;;-1:-1:-1;;;162188:32:0;;-1:-1:-1;;;;;162188:32:0;;;;;;;;;162118:28;;-1:-1:-1;162156:29:0;;162188:16;;;;;;:32;;;;;162118:28;;162188:32;;;;;;;;:16;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162188:32:0;162262:41;;;-1:-1:-1;;;162262:41:0;;-1:-1:-1;;;;;162262:41:0;;;;;;;;;162188:32;;-1:-1:-1;162230:28:0;;162262:25;;;;;;:41;;;;;162188:32;;162262:41;;;;;;;;:25;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;162262:41:0;;-1:-1:-1;162429:103:0;148519:8;162429:94;162472:50;162478:21;162262:41;162472:5;:50::i;:::-;162429:38;162435:15;162452:14;162429:5;:38::i;:::-;:42;:94;:42;:94;:::i;:103::-;162422:110;161571:968;-1:-1:-1;;;;;;;;;;161571:968:0:o;148481:46::-;148519:8;148481:46;:::o;168383:865::-;168564:29;168603:32;168645:34;168689:28;168727:25;168793:67;168809:7;168818:14;168834:7;-1:-1:-1;;;;;168834:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;168834:25:0;168793:15;:67::i;:::-;168769:91;;168948:101;168970:12;168984:14;169000:12;169014:11;169027:21;168948;:101::i;:::-;168870:179;;-1:-1:-1;168870:179:0;-1:-1:-1;169089:72:0;169105:12;169119:14;169135:12;169149:11;169089:15;:72::i;:::-;169060:101;;169221:20;169200:17;:41;;169171:70;;168383:865;;;;;;;;;;;:::o;159990:336::-;160115:7;-1:-1:-1;;;;;160115:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;160115:18:0;-1:-1:-1;;;;;160101:32:0;:10;:32;160093:54;;;;;-1:-1:-1;;;160093:54:0;;;;;;;;;;;;-1:-1:-1;;;160093:54:0;;;;;;;;;;;;;;;160174:14;-1:-1:-1;;;;;160165:23:0;:5;-1:-1:-1;;;;;160165:23:0;;;:46;;;;-1:-1:-1;;;;;;160192:19:0;;;;160165:46;160157:74;;;;;-1:-1:-1;;;160157:74:0;;;;;;;;;;;;-1:-1:-1;;;160157:74:0;;;;;;;;;;;;;;;160280:38;;;-1:-1:-1;;;160280:38:0;;160312:4;160280:38;;;;;;160241:78;;160268:10;;-1:-1:-1;;;;;160280:23:0;;;;;:38;;;;;;;;;;;;;;:23;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;160280:38:0;-1:-1:-1;;;;;160241:26:0;;;:78;;:26;:78;:::i;156716:227::-;156863:45;156879:7;156888:14;156904:3;156863:15;:45::i;:::-;156847:12;:61;;156839:97;;;;;-1:-1:-1;;;156839:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;169565:164;169650:7;169676:46;148519:8;169676:37;:3;169684:2;:28;;;169676:37;:7;:37;:::i;:46::-;169669:53;;169565:164;;;;;:::o;166188:1146::-;166401:28;166431:21;166514:12;166536:6;166514:29;;166554:23;166580:5;-1:-1:-1;;;;;166580:16:0;;166597:14;166580:32;;;;;;;;;;;;;-1:-1:-1;;;;;166580:32:0;-1:-1:-1;;;;;166580:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166580:32:0;166648:43;;;-1:-1:-1;;;166648:43:0;;-1:-1:-1;;;;;166648:43:0;;;;;;;;;166580:32;;-1:-1:-1;166622:22:0;;166648:27;;;;;;:43;;;;;166580:32;;166648:43;;;;;;;;:27;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166648:43:0;166727:19;;;-1:-1:-1;;;166727:19:0;;;;166648:43;;-1:-1:-1;166701:18:0;;-1:-1:-1;;;;;166727:17:0;;;;;:19;;;;;166648:43;;166727:19;;;;;;;:17;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166727:19:0;166782:34;;;-1:-1:-1;;;166782:34:0;;;;166727:19;;-1:-1:-1;166756:19:0;;-1:-1:-1;;;;;166782:32:0;;;;;:34;;;;;166727:19;;166782:34;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166782:34:0;166852:18;;;-1:-1:-1;;;166852:18:0;;;;166782:34;;-1:-1:-1;166826:15:0;;-1:-1:-1;;;;;166852:16:0;;;;;:18;;;;;166782:34;;166852:18;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166852:18:0;166997:209;;;-1:-1:-1;;;166997:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;166852:18;;-1:-1:-1;;;;;;166997:30:0;;;;;:209;;;;;166852:18;;166997:209;;;;;;;;:30;:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166997:209:0;167290:37;;;-1:-1:-1;;;167290:37:0;;-1:-1:-1;;;;;167290:37:0;;;;;;;;;166997:209;;-1:-1:-1;167290:29:0;;;;;;:37;;;;;166997:209;;167290:37;;;;;;;;:29;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;167290:37:0;166188:1146;;167290:37;;-1:-1:-1;166188:1146:0;;-1:-1:-1;;;;;;;;;;;166188:1146:0:o;163057:273::-;163218:7;163244:79;163261:6;163269:14;163292:11;-1:-1:-1;;;;;163285:29:0;;163315:6;163285:37;;;;;;;;;;;;;-1:-1:-1;;;;;163285:37:0;-1:-1:-1;;;;;163285:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;163244:79;163237:86;163057:273;-1:-1:-1;;;;;163057:273:0:o;150800:1175::-;151053:21;151104:12;-1:-1:-1;;;;;151091:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151091:36:0;151162:26;;;-1:-1:-1;;;151162:26:0;;;;151091:36;;-1:-1:-1;151138:19:0;;-1:-1:-1;;;;;151162:24:0;;;;;:26;;;;;151091:36;;151162:26;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151162:26:0;151231:39;;;-1:-1:-1;;;151231:39:0;;-1:-1:-1;;;;;151231:39:0;;;;;;;;;151162:26;;-1:-1:-1;151231:26:0;;;;;;:39;;;;;151162:26;;151231:39;;;;;;;;:26;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151231:39:0;151223:87;;;;;-1:-1:-1;;;151223:87:0;;;;;;;;;;;;-1:-1:-1;;;151223:87:0;;;;;;;;;;;;;;;151341:11;-1:-1:-1;;;;;151328:32:0;;151361:4;151328:38;;;;;;;;;;;;;-1:-1:-1;;;;;151328:38:0;-1:-1:-1;;;;;151328:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151328:38:0;151320:86;;;;;-1:-1:-1;;;151320:86:0;;;;;;;;;;;;-1:-1:-1;;;151320:86:0;;;;;;;;;;;;;;;151424:62;;;-1:-1:-1;;;151424:62:0;;-1:-1:-1;;;;;151424:62:0;;;;;;;;;;;;;;148571:1;151424:62;;;;;;:25;;;;;;:62;;;;;;;;;;;;;;;:25;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151424:62:0;151416:88;;;;;-1:-1:-1;;;151416:88:0;;;;;;;;;;;;-1:-1:-1;;;151416:88:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;151536:17:0;;;151515:18;151536:17;;;;;;;;;;;:28;;;;;;;;;;;;151654:24;151650:168;;151726:9;-1:-1:-1;;;;;151707:39:0;;151747:4;151707:45;;;;;;;;;;;;;-1:-1:-1;;;;;151707:45:0;-1:-1:-1;;;;;151707:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;151707:45:0;-1:-1:-1;;;;;151766:17:0;;;;;;;151707:45;151766:17;;;;;;;:28;;;;;;;;;;:41;;-1:-1:-1;;;;;;151766:41:0;;;;;;;;;;151707:45;-1:-1:-1;151650:168:0;151854:65;;;-1:-1:-1;;;151854:65:0;;-1:-1:-1;;;;;151854:65:0;;;;;;;;;;;;;;;;;;;;;;:42;;;;;;:65;;;;;-1:-1:-1;;151854:65:0;;;;;;;;-1:-1:-1;151854:42:0;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;151935:33:0;;;-1:-1:-1;;;;;151935:33:0;;;;;;;;;;;;;;;;;-1:-1:-1;151935:33:0;;-1:-1:-1;151935:33:0;;;;;;;;;150800:1175;;;;;;;;;:::o;26463:134::-;26521:7;26547:43;26551:1;26554;26547:43;;;;;;;;;;;;;;;;;:3;:43::i;26016:176::-;26074:7;26105:5;;;26128:6;;;;26120:46;;;;;-1:-1:-1;;;26120:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27322:459;27380:7;27621:6;27617:45;;-1:-1:-1;27650:1:0;27643:8;;27617:45;27684:5;;;27688:1;27684;:5;:1;27707:5;;;;;:10;27699:56;;;;-1:-1:-1;;;27699:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28243:130;28301:7;28327:39;28331:1;28334;28327:39;;;;;;;;;;;;;;;;;:3;:39::i;164035:1154::-;164176:7;164244:12;164277:6;164244:40;;164294:23;164320:5;-1:-1:-1;;;;;164320:16:0;;164337:14;164320:32;;;;;;;;;;;;;-1:-1:-1;;;;;164320:32:0;-1:-1:-1;;;;;164320:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164320:32:0;164388:43;;;-1:-1:-1;;;164388:43:0;;-1:-1:-1;;;;;164388:43:0;;;;;;;;;164320:32;;-1:-1:-1;164362:22:0;;164388:27;;;;;;:43;;;;;164320:32;;164388:43;;;;;;;;:27;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164388:43:0;164467:19;;;-1:-1:-1;;;164467:19:0;;;;164388:43;;-1:-1:-1;164441:18:0;;-1:-1:-1;;;;;164467:17:0;;;;;:19;;;;;164388:43;;164467:19;;;;;;;:17;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164467:19:0;164522:34;;;-1:-1:-1;;;164522:34:0;;;;164467:19;;-1:-1:-1;164496:19:0;;-1:-1:-1;;;;;164522:32:0;;;;;:34;;;;;164467:19;;164522:34;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164522:34:0;164592:18;;;-1:-1:-1;;;164592:18:0;;;;164522:34;;-1:-1:-1;164566:15:0;;-1:-1:-1;;;;;164592:16:0;;;;;:18;;;;;164522:34;;164592:18;;;;;;;:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164592:18:0;164733:193;;;-1:-1:-1;;;164733:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;164592:18;;-1:-1:-1;164708:22:0;;-1:-1:-1;;;;;164733:30:0;;;;;:193;;;;;164592:18;;164733:193;;;;;;;:30;:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;164733:193:0;165075:21;;;-1:-1:-1;;;165075:21:0;;;;164733:193;;-1:-1:-1;165034:18:0;;165055:51;;148519:8;;165055:42;;-1:-1:-1;;;;;165075:19:0;;;;;:21;;;;;164733:193;;165075:21;;;;;;;;:19;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;165075:21:0;165055:15;;:42;:19;:42;:::i;:51::-;165034:72;;165142:10;165124:14;:28;;:58;;165172:10;165124:58;;;165155:14;165124:58;165117:65;164035:1154;-1:-1:-1;;;;;;;;;;;;164035:1154:0:o;160539:344::-;160599:7;160626:6;160618:29;;;;;-1:-1:-1;;;160618:29:0;;;;;;;;;;;;-1:-1:-1;;;160618:29:0;;;;;;;;;;;;;;;148519:8;160670:7;;160695:6;;;:23;;;148519:8;160710:1;160705:2;:6;;;;;;:13;160695:23;160687:50;;;;;-1:-1:-1;;;160687:50:0;;;;;;;;;;;;-1:-1:-1;;;160687:50:0;;;;;;;;;;;;;;;160788:1;160784:5;;160778:12;;160808:8;;;;160800:35;;;;;-1:-1:-1;;;160800:35:0;;;;;;;;;;;;-1:-1:-1;;;160800:35:0;;;;;;;;;;;;;;;160875:1;160870:2;:6;;;;;;;160539:344;-1:-1:-1;;;;;160539:344:0:o;170162:475::-;170276:7;170302:283;170546:7;-1:-1:-1;;;;;170546:22:0;;170569:14;170546:38;;;;;;;;;;;;;-1:-1:-1;;;;;170546:38:0;-1:-1:-1;;;;;170546:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;170546:38:0;170445:40;;;-1:-1:-1;;;170445:40:0;;;;170302:184;;-1:-1:-1;;;;;170445:38:0;;;;;:40;;;;;170546:38;;170445:40;;;;;;;;:38;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;170445:40:0;170439:2;:46;170302:35;:9;170329:7;170302:35;:26;:35;:::i;144181:175::-;144290:58;;;-1:-1:-1;;;;;144290:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;144290:58:0;-1:-1:-1;;;144290:58:0;;;144263:86;;144283:5;;144263:19;:86::i;26888:187::-;26974:7;27009:12;27001:6;;;;26993:29;;;;-1:-1:-1;;;26993:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27044:5:0;;;26888:187::o;28855:272::-;28941:7;28975:12;28968:5;28960:28;;;;-1:-1:-1;;;28960:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28998:9;29014:1;29010;:5;;;;146444:751;146863:23;146889:69;146917:4;146889:69;;;;;;;;;;;;;;;;;146897:5;-1:-1:-1;;;;;146889:27:0;;;:69;;;;;:::i;:::-;146972:17;;146863:95;;-1:-1:-1;146972:21:0;146968:221;;147112:10;147101:30;;;;;;;;;;;;;;;-1:-1:-1;147101:30:0;147093:85;;;;-1:-1:-1;;;147093:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;140157:193;140260:12;140291:52;140313:6;140321:4;140327:1;140330:12;140260;141434:18;141445:6;141434:10;:18::i;:::-;141426:60;;;;;-1:-1:-1;;;141426:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;141557:12;141571:23;141598:6;-1:-1:-1;;;;;141598:11:0;141618:5;141626:4;141598:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;141598:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;141556:75;;;;141648:52;141666:7;141675:10;141687:12;141648:17;:52::i;:::-;141641:59;141184:523;-1:-1:-1;;;;;;;141184:523:0:o;137302:413::-;137662:20;137700:8;;;137302:413::o;142687:725::-;142802:12;142830:7;142826:580;;;-1:-1:-1;142860:10:0;142853:17;;142826:580;142971:17;;:21;142967:429;;143229:10;143223:17;143289:15;143276:10;143272:2;143268:19;143261:44;143178:145;143361:20;;-1:-1:-1;;;143361:20:0;;;;;;;;;;;;;;;;;143368:12;;143361:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "methodIdentifiers": {
              "BPTVal(address,address,address,address)": "681cb10a",
              "DL_FACTORY()": "174a5be4",
              "MAX_UINT256()": "33a581d2",
              "WAD()": "6a146024",
              "calculateClaimAndPortions(uint256[7],uint256,uint256)": "3faa6c5d",
              "fromWad(uint256,uint256)": "bf36f0e9",
              "fundLoan(mapping(address => mapping(address => address)) storage,address,address,address,address,uint256)": "fbecb171",
              "getInitialStakeRequirements(IMapleGlobals,address,address,address,address)": "767f5038",
              "getPoolSharesRequired(address,address,address,address,uint256)": "c3746825",
              "getSwapOutValue(address,address,address,address)": "ee7375be",
              "getSwapOutValueLocker(address,address,address)": "4119bdfa",
              "handleDefault(IERC20,address,address,uint256)": "0715b090",
              "increaseCustodyAllowanceChecks(address,uint256,uint256,uint256)": "297e7bf7",
              "poolSanityChecks(IMapleGlobals,address,address,uint256,uint256)": "14985168",
              "reclaimERC20(address,address,IMapleGlobals)": "a89d5ddb",
              "transferByCustodianChecks(address,address,uint256)": "1b4c9031",
              "validateDeactivation(IMapleGlobals,uint256,address)": "abbedb40"
            }
          }
        },
        "SafeERC20": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206a6668309548a25f5fd2f05f4e09970f7f4db29c31001dcf35ff7dded952e95c64736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0x6668309548A25F5FD2F05F 0x4E MULMOD SWAP8 0xF PUSH32 0x4DB29C31001DCF35FF7DDED952E95C64736F6C634300060B0033000000000000 ",
              "sourceMap": "144093:3104:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206a6668309548a25f5fd2f05f4e09970f7f4db29c31001dcf35ff7dded952e95c64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0x6668309548A25F5FD2F05F 0x4E MULMOD SWAP8 0xF PUSH32 0x4DB29C31001DCF35FF7DDED952E95C64736F6C634300060B0033000000000000 ",
              "sourceMap": "144093:3104:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122025976f99ac954fc9d2c7b622c25de4deadee56d9c48aef4e3429103962a5f38764736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 SWAP8 PUSH16 0x99AC954FC9D2C7B622C25DE4DEADEE56 0xD9 0xC4 DUP11 0xEF 0x4E CALLVALUE 0x29 LT CODECOPY PUSH3 0xA5F387 PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "25764:4578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122025976f99ac954fc9d2c7b622c25de4deadee56d9c48aef4e3429103962a5f38764736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 SWAP8 PUSH16 0x99AC954FC9D2C7B622C25DE4DEADEE56 0xD9 0xC4 DUP11 0xEF 0x4E CALLVALUE 0x29 LT CODECOPY PUSH3 0xA5F387 PUSH5 0x736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "25764:4578:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMathInt": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122004802a726112a40ab3f5edb1affd1418b956bd9b6206e793df8bfac0488b662164736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV DUP1 0x2A PUSH19 0x6112A40AB3F5EDB1AFFD1418B956BD9B6206E7 SWAP4 0xDF DUP12 STATICCALL 0xC0 0x48 DUP12 PUSH7 0x2164736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "24684:165:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122004802a726112a40ab3f5edb1affd1418b956bd9b6206e793df8bfac0488b662164736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV DUP1 0x2A PUSH19 0x6112A40AB3F5EDB1AFFD1418B956BD9B6206E7 SWAP4 0xDF DUP12 STATICCALL 0xC0 0x48 DUP12 PUSH7 0x2164736F6C6343 STOP MOD SIGNEXTEND STOP CALLER ",
              "sourceMap": "24684:165:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SafeMathUint": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206989325dad092b6c4bdef30f9718301084daa43db4d1b6ee696beda0ef108f7e64736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0x89325DAD092B6C4BDEF3 0xF SWAP8 XOR ADDRESS LT DUP5 0xDA LOG4 RETURNDATASIZE 0xB4 0xD1 0xB6 0xEE PUSH10 0x6BEDA0EF108F7E64736F PUSH13 0x634300060B0033000000000000 ",
              "sourceMap": "24934:163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206989325dad092b6c4bdef30f9718301084daa43db4d1b6ee696beda0ef108f7e64736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0x89325DAD092B6C4BDEF3 0xF SWAP8 XOR ADDRESS LT DUP5 0xDA LOG4 RETURNDATASIZE 0xB4 0xD1 0xB6 0xEE PUSH10 0x6BEDA0EF108F7E64736F PUSH13 0x634300060B0033000000000000 ",
              "sourceMap": "24934:163:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        },
        "SignedSafeMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206fefc68e506f8692d79d0f5738ea89a6366191aa5572ed1a8d96729242d4112064736f6c634300060b0033",
              "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0xEFC68E506F8692D79D0F5738EA89A636 PUSH2 0x91AA SSTORE PUSH19 0xED1A8D96729242D4112064736F6C634300060B STOP CALLER ",
              "sourceMap": "30556:2495:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206fefc68e506f8692d79d0f5738ea89a6366191aa5572ed1a8d96729242d4112064736f6c634300060b0033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0xEFC68E506F8692D79D0F5738EA89A636 PUSH2 0x91AA SSTORE PUSH19 0xED1A8D96729242D4112064736F6C634300060B STOP CALLER ",
              "sourceMap": "30556:2495:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        }
      }
    },
    "sources": {
      "contracts/core/pool/v1/PoolFactory.sol": {
        "ast": {
          "absolutePath": "contracts/core/pool/v1/PoolFactory.sol",
          "exportedSymbols": {
            "Address": [
              4572
            ],
            "BasicFDT": [
              1946
            ],
            "Context": [
              1076
            ],
            "ERC20": [
              1574
            ],
            "ExtendedFDT": [
              2379
            ],
            "IBPool": [
              4312
            ],
            "IBasicFDT": [
              141
            ],
            "IDebtLocker": [
              588
            ],
            "IDebtLockerFactory": [
              640
            ],
            "IERC20": [
              77
            ],
            "IERC20Details": [
              4330
            ],
            "IExtendedFDT": [
              2006
            ],
            "ILiquidityLocker": [
              2902
            ],
            "ILiquidityLockerFactory": [
              2946
            ],
            "ILoan": [
              520
            ],
            "ILoanFDT": [
              161
            ],
            "ILoanFactory": [
              3092
            ],
            "IMapleGlobals": [
              2870
            ],
            "IPool": [
              3697
            ],
            "IPoolFDT": [
              3120
            ],
            "IPoolFactory": [
              3821
            ],
            "IStakeLocker": [
              4104
            ],
            "IStakeLockerFDT": [
              3849
            ],
            "IStakeLockerFactory": [
              4156
            ],
            "ISubFactory": [
              596
            ],
            "Pausable": [
              7479
            ],
            "Pool": [
              7392
            ],
            "PoolFDT": [
              3230
            ],
            "PoolFactory": [
              7771
            ],
            "PoolLib": [
              5865
            ],
            "SafeERC20": [
              4780
            ],
            "SafeMath": [
              878
            ],
            "SafeMathInt": [
              661
            ],
            "SafeMathUint": [
              684
            ],
            "SignedSafeMath": [
              1055
            ]
          },
          "id": 7772,
          "license": "AGPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "=",
                "0.6",
                ".11",
                ">=",
                "0.6",
                ".0",
                "<",
                "0.8",
                ".0",
                ">=",
                "0.6",
                ".2",
                "<",
                "0.8",
                ".0"
              ],
              "nodeType": "PragmaDirective",
              "src": "115:54:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "277: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": "371: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": "462:2:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "488:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "488:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "487:9:0"
                  },
                  "scope": 77,
                  "src": "442:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 9,
                    "nodeType": "StructuredDocumentation",
                    "src": "503: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": "599:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "599:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "598:17:0"
                  },
                  "returnParameters": {
                    "id": 15,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 14,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 16,
                        "src": "639:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "639:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "638:9:0"
                  },
                  "scope": 77,
                  "src": "580:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 17,
                    "nodeType": "StructuredDocumentation",
                    "src": "654: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": "886:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 18,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "886: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": "905:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 20,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "905:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "885:35:0"
                  },
                  "returnParameters": {
                    "id": 25,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 24,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 26,
                        "src": "939:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 23,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "939:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "938:6:0"
                  },
                  "scope": 77,
                  "src": "868:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 27,
                    "nodeType": "StructuredDocumentation",
                    "src": "951: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": "1239:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 28,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1239: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": "1254:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 30,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1254:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1238:32:0"
                  },
                  "returnParameters": {
                    "id": 35,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 34,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1294:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1294:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1293:9:0"
                  },
                  "scope": 77,
                  "src": "1220:83:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 37,
                    "nodeType": "StructuredDocumentation",
                    "src": "1309: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": "1973:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 38,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1973: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": "1990:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 40,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1990:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1972:33:0"
                  },
                  "returnParameters": {
                    "id": 45,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 44,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 46,
                        "src": "2024:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 43,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2024:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2023:6:0"
                  },
                  "scope": 77,
                  "src": "1956:74:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 47,
                    "nodeType": "StructuredDocumentation",
                    "src": "2036: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": "2359:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 48,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2359: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": "2375:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 50,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2375: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": "2394:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 52,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2394:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2358:51:0"
                  },
                  "returnParameters": {
                    "id": 57,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 56,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 58,
                        "src": "2428:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 55,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2428:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2427:6:0"
                  },
                  "scope": 77,
                  "src": "2337:97:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 59,
                    "nodeType": "StructuredDocumentation",
                    "src": "2440: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": "2618:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 60,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2618: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": "2640:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 62,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2640: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": "2660:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 64,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2660:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2617:57:0"
                  },
                  "src": "2603:72:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 68,
                    "nodeType": "StructuredDocumentation",
                    "src": "2681: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": "2849:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 69,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2849: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": "2872:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 71,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2872: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": "2897:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2897:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2848:63:0"
                  },
                  "src": "2834:78:0"
                }
              ],
              "scope": 7772,
              "src": "348:2566:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 79,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "3247:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 80,
                  "nodeType": "InheritanceSpecifier",
                  "src": "3247:6:0"
                }
              ],
              "contractDependencies": [
                77
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 78,
                "nodeType": "StructuredDocumentation",
                "src": "3130: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": "3261: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": "3525:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 82,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3525: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": "3545:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 84,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3545:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3524:46:0"
                  },
                  "src": "3502:69:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 88,
                    "nodeType": "StructuredDocumentation",
                    "src": "3577: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": "3918:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 89,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3918: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": "3938:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 91,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3938: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": "3962:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 93,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3962:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3917:68:0"
                  },
                  "src": "3897:89:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 97,
                    "nodeType": "StructuredDocumentation",
                    "src": "3992: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": "4204:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 98,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4204:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4203:9:0"
                  },
                  "src": "4176:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 102,
                    "nodeType": "StructuredDocumentation",
                    "src": "4219: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": "4489:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 103,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4489: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": "4506:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 105,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4506:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4488:25:0"
                  },
                  "src": "4459:55:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 109,
                    "nodeType": "StructuredDocumentation",
                    "src": "4520: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": "4755:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4755:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4754:16:0"
                  },
                  "returnParameters": {
                    "id": 115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 114,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 116,
                        "src": "4794:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 113,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4794:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4793:9:0"
                  },
                  "scope": 141,
                  "src": "4726:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 117,
                    "nodeType": "StructuredDocumentation",
                    "src": "4809: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": "4918:2:0"
                  },
                  "returnParameters": {
                    "id": 119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4929:0:0"
                  },
                  "scope": 141,
                  "src": "4896:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 121,
                    "nodeType": "StructuredDocumentation",
                    "src": "4936: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": "5172:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5172:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5171:16:0"
                  },
                  "returnParameters": {
                    "id": 127,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 126,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 128,
                        "src": "5211:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 125,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5211:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5210:9:0"
                  },
                  "scope": 141,
                  "src": "5146:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 129,
                    "nodeType": "StructuredDocumentation",
                    "src": "5226: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": "5682:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5682:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5681:16:0"
                  },
                  "returnParameters": {
                    "id": 135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 136,
                        "src": "5721:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5721:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "5720:9:0"
                  },
                  "scope": 141,
                  "src": "5653:77:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 137,
                    "nodeType": "StructuredDocumentation",
                    "src": "5736: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": "6137:2:0"
                  },
                  "returnParameters": {
                    "id": 139,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6148:0:0"
                  },
                  "scope": 141,
                  "src": "6109:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "3224:2928:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 142,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "6468:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 143,
                  "nodeType": "InheritanceSpecifier",
                  "src": "6468: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": "6485: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": "6563:2:0"
                  },
                  "returnParameters": {
                    "id": 148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 147,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 149,
                        "src": "6589: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": "6589:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6588:8:0"
                  },
                  "scope": 161,
                  "src": "6544:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 150,
                    "nodeType": "StructuredDocumentation",
                    "src": "6603: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": "6757:2:0"
                  },
                  "returnParameters": {
                    "id": 154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 153,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 155,
                        "src": "6783:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 152,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6783:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "6782:9:0"
                  },
                  "scope": 161,
                  "src": "6731:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 156,
                    "nodeType": "StructuredDocumentation",
                    "src": "6798: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": "6910:8:0"
                  },
                  "parameters": {
                    "id": 157,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6898:2:0"
                  },
                  "returnParameters": {
                    "id": 159,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6918:0:0"
                  },
                  "scope": 161,
                  "src": "6876:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "6446:476:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 162,
                    "name": "ILoanFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 161,
                    "src": "7183:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ILoanFDT_$161",
                      "typeString": "contract ILoanFDT"
                    }
                  },
                  "id": 163,
                  "nodeType": "InheritanceSpecifier",
                  "src": "7183: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": "7636:5:0"
                    },
                    {
                      "id": 165,
                      "name": "Active",
                      "nodeType": "EnumValue",
                      "src": "7643:6:0"
                    },
                    {
                      "id": 166,
                      "name": "Matured",
                      "nodeType": "EnumValue",
                      "src": "7651:7:0"
                    },
                    {
                      "id": 167,
                      "name": "Expired",
                      "nodeType": "EnumValue",
                      "src": "7660:7:0"
                    },
                    {
                      "id": 168,
                      "name": "Liquidated",
                      "nodeType": "EnumValue",
                      "src": "7669:10:0"
                    }
                  ],
                  "name": "State",
                  "nodeType": "EnumDefinition",
                  "src": "7623:58:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 170,
                    "nodeType": "StructuredDocumentation",
                    "src": "7687: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": "7905:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 171,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7905: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": "7931:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 173,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7931:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "7904:48:0"
                  },
                  "src": "7888:65:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 177,
                    "nodeType": "StructuredDocumentation",
                    "src": "7959: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": "8247:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 178,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8247: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": "8272:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 180,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8272: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": "8295:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 182,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8295:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8246:65:0"
                  },
                  "src": "8226:86:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 186,
                    "nodeType": "StructuredDocumentation",
                    "src": "8318: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": "8491:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 187,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8491:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8490:24:0"
                  },
                  "src": "8476:39:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 191,
                    "nodeType": "StructuredDocumentation",
                    "src": "8521: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": "8676: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": "8676:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$169",
                            "typeString": "enum ILoan.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8675:13:0"
                  },
                  "src": "8653:36:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 196,
                    "nodeType": "StructuredDocumentation",
                    "src": "8695: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": "8939:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8939: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": "8966:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 199,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8966:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "8938:41:0"
                  },
                  "src": "8920:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 203,
                    "nodeType": "StructuredDocumentation",
                    "src": "8986: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": "9598:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 204,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9598: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": "9625:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 206,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9625: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": "9656:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 208,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9656: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": "9686:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 210,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9686: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": "9721:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 212,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9721: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": "9752:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9752: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": "9784:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9784:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "9588:218:0"
                  },
                  "src": "9571:236:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 220,
                    "nodeType": "StructuredDocumentation",
                    "src": "9813: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": "10265:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 221,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10265: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": "10300:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 223,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10300: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": "10340:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 225,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10340: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": "10375:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 227,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10375:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10255:149:0"
                  },
                  "src": "10238:167:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 231,
                    "nodeType": "StructuredDocumentation",
                    "src": "10411: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": "10526:2:0"
                  },
                  "returnParameters": {
                    "id": 235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 234,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 236,
                        "src": "10552: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": "10552:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$169",
                            "typeString": "enum ILoan.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10551:7:0"
                  },
                  "scope": 520,
                  "src": "10508:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 237,
                    "nodeType": "StructuredDocumentation",
                    "src": "10565: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": "10696:2:0"
                  },
                  "returnParameters": {
                    "id": 241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 240,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 242,
                        "src": "10722: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": "10722:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10721:8:0"
                  },
                  "scope": 520,
                  "src": "10673:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 243,
                    "nodeType": "StructuredDocumentation",
                    "src": "10736: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": "10879:2:0"
                  },
                  "returnParameters": {
                    "id": 247,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 246,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 248,
                        "src": "10905: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": "10905:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "10904:8:0"
                  },
                  "scope": 520,
                  "src": "10855:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 249,
                    "nodeType": "StructuredDocumentation",
                    "src": "10919: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": "11038:2:0"
                  },
                  "returnParameters": {
                    "id": 253,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 252,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 254,
                        "src": "11064:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 251,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11064:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11063:9:0"
                  },
                  "scope": 520,
                  "src": "11016:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 255,
                    "nodeType": "StructuredDocumentation",
                    "src": "11079: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": "11152:2:0"
                  },
                  "returnParameters": {
                    "id": 259,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 258,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 260,
                        "src": "11178:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 257,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11178:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11177:9:0"
                  },
                  "scope": 520,
                  "src": "11134:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 261,
                    "nodeType": "StructuredDocumentation",
                    "src": "11193: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": "11307:2:0"
                  },
                  "returnParameters": {
                    "id": 265,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 264,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 266,
                        "src": "11333:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11333:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11332:9:0"
                  },
                  "scope": 520,
                  "src": "11282:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 267,
                    "nodeType": "StructuredDocumentation",
                    "src": "11348: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": "11424:2:0"
                  },
                  "returnParameters": {
                    "id": 271,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 270,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 272,
                        "src": "11450:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 269,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11450:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11449:9:0"
                  },
                  "scope": 520,
                  "src": "11406:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 273,
                    "nodeType": "StructuredDocumentation",
                    "src": "11465: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": "11566:2:0"
                  },
                  "returnParameters": {
                    "id": 277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 276,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 278,
                        "src": "11592:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 275,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11592:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11591:9:0"
                  },
                  "scope": 520,
                  "src": "11549:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 279,
                    "nodeType": "StructuredDocumentation",
                    "src": "11607: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": "11691:2:0"
                  },
                  "returnParameters": {
                    "id": 283,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 282,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 284,
                        "src": "11717:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 281,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11717:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11716:9:0"
                  },
                  "scope": 520,
                  "src": "11669:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 285,
                    "nodeType": "StructuredDocumentation",
                    "src": "11732: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": "11812:2:0"
                  },
                  "returnParameters": {
                    "id": 289,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 288,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 290,
                        "src": "11838:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 287,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11838:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11837:9:0"
                  },
                  "scope": 520,
                  "src": "11792:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 291,
                    "nodeType": "StructuredDocumentation",
                    "src": "11853: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": "11933:2:0"
                  },
                  "returnParameters": {
                    "id": 295,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 294,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 296,
                        "src": "11959:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 293,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11959:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "11958:9:0"
                  },
                  "scope": 520,
                  "src": "11913:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 297,
                    "nodeType": "StructuredDocumentation",
                    "src": "11974: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": "12065:2:0"
                  },
                  "returnParameters": {
                    "id": 301,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 300,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 302,
                        "src": "12091:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 299,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12091:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12090:9:0"
                  },
                  "scope": 520,
                  "src": "12044:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 303,
                    "nodeType": "StructuredDocumentation",
                    "src": "12106: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": "12307:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 304,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12307:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12306:19:0"
                  },
                  "returnParameters": {
                    "id": 309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 308,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 310,
                        "src": "12349:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 307,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12349:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12348:6:0"
                  },
                  "scope": 520,
                  "src": "12287:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 311,
                    "nodeType": "StructuredDocumentation",
                    "src": "12361: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": "12462:2:0"
                  },
                  "returnParameters": {
                    "id": 315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 314,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 316,
                        "src": "12488:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 313,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12488:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12487:9:0"
                  },
                  "scope": 520,
                  "src": "12439:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 317,
                    "nodeType": "StructuredDocumentation",
                    "src": "12503: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": "12569:2:0"
                  },
                  "returnParameters": {
                    "id": 321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 320,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 322,
                        "src": "12595:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 319,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12595:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12594:9:0"
                  },
                  "scope": 520,
                  "src": "12557:47:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 323,
                    "nodeType": "StructuredDocumentation",
                    "src": "12610: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": "12711:2:0"
                  },
                  "returnParameters": {
                    "id": 327,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 326,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 328,
                        "src": "12737:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 325,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12737:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12736:9:0"
                  },
                  "scope": 520,
                  "src": "12685:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 329,
                    "nodeType": "StructuredDocumentation",
                    "src": "12752: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": "12841:2:0"
                  },
                  "returnParameters": {
                    "id": 333,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 332,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 334,
                        "src": "12867:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 331,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12867:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "12866:9:0"
                  },
                  "scope": 520,
                  "src": "12824:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 335,
                    "nodeType": "StructuredDocumentation",
                    "src": "12882: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": "12985:2:0"
                  },
                  "returnParameters": {
                    "id": 339,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 338,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 340,
                        "src": "13011:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 337,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13011:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13010:9:0"
                  },
                  "scope": 520,
                  "src": "12954:66:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 341,
                    "nodeType": "StructuredDocumentation",
                    "src": "13026: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": "13114:2:0"
                  },
                  "returnParameters": {
                    "id": 345,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 344,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 346,
                        "src": "13140:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 343,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13140:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13139:9:0"
                  },
                  "scope": 520,
                  "src": "13092:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 347,
                    "nodeType": "StructuredDocumentation",
                    "src": "13155: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": "13294:2:0"
                  },
                  "returnParameters": {
                    "id": 351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 350,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 352,
                        "src": "13320:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 349,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13320:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13319:9:0"
                  },
                  "scope": 520,
                  "src": "13270:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 353,
                    "nodeType": "StructuredDocumentation",
                    "src": "13335: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": "13427:2:0"
                  },
                  "returnParameters": {
                    "id": 357,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 356,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 358,
                        "src": "13453:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 355,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13453:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13452:9:0"
                  },
                  "scope": 520,
                  "src": "13409:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 359,
                    "nodeType": "StructuredDocumentation",
                    "src": "13468: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": "13564:2:0"
                  },
                  "returnParameters": {
                    "id": 363,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 362,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 364,
                        "src": "13590:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 361,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13590:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13589:9:0"
                  },
                  "scope": 520,
                  "src": "13542:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 365,
                    "nodeType": "StructuredDocumentation",
                    "src": "13605: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": "13760:2:0"
                  },
                  "returnParameters": {
                    "id": 369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 368,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 370,
                        "src": "13786:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13786:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13785:9:0"
                  },
                  "scope": 520,
                  "src": "13733:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 371,
                    "nodeType": "StructuredDocumentation",
                    "src": "13801: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": "13914:2:0"
                  },
                  "returnParameters": {
                    "id": 375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 374,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 376,
                        "src": "13940:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 373,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13940:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "13939:9:0"
                  },
                  "scope": 520,
                  "src": "13892:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 377,
                    "nodeType": "StructuredDocumentation",
                    "src": "13955: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": "14095:2:0"
                  },
                  "returnParameters": {
                    "id": 381,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 380,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 382,
                        "src": "14121:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 379,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14121:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14120:9:0"
                  },
                  "scope": 520,
                  "src": "14073:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 383,
                    "nodeType": "StructuredDocumentation",
                    "src": "14136: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": "14274:2:0"
                  },
                  "returnParameters": {
                    "id": 387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 386,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 388,
                        "src": "14300:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 385,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14300:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14299:9:0"
                  },
                  "scope": 520,
                  "src": "14253:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 389,
                    "nodeType": "StructuredDocumentation",
                    "src": "14315: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": "14445:2:0"
                  },
                  "returnParameters": {
                    "id": 393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 392,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 394,
                        "src": "14471:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 391,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14471:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14470:9:0"
                  },
                  "scope": 520,
                  "src": "14429:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 395,
                    "nodeType": "StructuredDocumentation",
                    "src": "14486: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": "14622:2:0"
                  },
                  "returnParameters": {
                    "id": 399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 398,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 400,
                        "src": "14648:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14648:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14647:9:0"
                  },
                  "scope": 520,
                  "src": "14599:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 401,
                    "nodeType": "StructuredDocumentation",
                    "src": "14663: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": "14788:2:0"
                  },
                  "returnParameters": {
                    "id": 405,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 404,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 406,
                        "src": "14814:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 403,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14814:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14813:9:0"
                  },
                  "scope": 520,
                  "src": "14763:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 407,
                    "nodeType": "StructuredDocumentation",
                    "src": "14829: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": "14951:2:0"
                  },
                  "returnParameters": {
                    "id": 411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 410,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 412,
                        "src": "14977:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14977:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "14976:9:0"
                  },
                  "scope": 520,
                  "src": "14927:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 413,
                    "nodeType": "StructuredDocumentation",
                    "src": "14992: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": "15125:2:0"
                  },
                  "returnParameters": {
                    "id": 417,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 416,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 418,
                        "src": "15151:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 415,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15151:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15150:9:0"
                  },
                  "scope": 520,
                  "src": "15101:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 419,
                    "nodeType": "StructuredDocumentation",
                    "src": "15166: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": "15329:2:0"
                  },
                  "returnParameters": {
                    "id": 423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 422,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 424,
                        "src": "15355:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15355:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15354:9:0"
                  },
                  "scope": 520,
                  "src": "15303:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 425,
                    "nodeType": "StructuredDocumentation",
                    "src": "15370: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": "15902:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 426,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15902:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "15901:13:0"
                  },
                  "returnParameters": {
                    "id": 429,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "15923:0:0"
                  },
                  "scope": 520,
                  "src": "15884:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 431,
                    "nodeType": "StructuredDocumentation",
                    "src": "15930: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": "16066:2:0"
                  },
                  "returnParameters": {
                    "id": 433,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16077:0:0"
                  },
                  "scope": 520,
                  "src": "16046:32:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 435,
                    "nodeType": "StructuredDocumentation",
                    "src": "16084: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": "16267:2:0"
                  },
                  "returnParameters": {
                    "id": 437,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16278:0:0"
                  },
                  "scope": 520,
                  "src": "16243:36:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 439,
                    "nodeType": "StructuredDocumentation",
                    "src": "16289: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": "16728:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 440,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16728: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": "16744:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 442,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16744:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "16727:29:0"
                  },
                  "returnParameters": {
                    "id": 445,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "16765:0:0"
                  },
                  "scope": 520,
                  "src": "16710:56:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 447,
                    "nodeType": "StructuredDocumentation",
                    "src": "16772: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": "17049:2:0"
                  },
                  "returnParameters": {
                    "id": 449,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17060:0:0"
                  },
                  "scope": 520,
                  "src": "17034:27:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 451,
                    "nodeType": "StructuredDocumentation",
                    "src": "17067: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": "17479:2:0"
                  },
                  "returnParameters": {
                    "id": 453,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17490:0:0"
                  },
                  "scope": 520,
                  "src": "17456:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 455,
                    "nodeType": "StructuredDocumentation",
                    "src": "17497: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": "17679:2:0"
                  },
                  "returnParameters": {
                    "id": 457,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17690:0:0"
                  },
                  "scope": 520,
                  "src": "17665:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 459,
                    "nodeType": "StructuredDocumentation",
                    "src": "17697: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": "17900:2:0"
                  },
                  "returnParameters": {
                    "id": 461,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "17911:0:0"
                  },
                  "scope": 520,
                  "src": "17884:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 463,
                    "nodeType": "StructuredDocumentation",
                    "src": "17918: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": "18233:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 464,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18233: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": "18252:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 466,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "18252:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18232:33:0"
                  },
                  "returnParameters": {
                    "id": 469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18274:0:0"
                  },
                  "scope": 520,
                  "src": "18211:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 471,
                    "nodeType": "StructuredDocumentation",
                    "src": "18281: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": "18500:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 472,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18500:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "18499:15:0"
                  },
                  "returnParameters": {
                    "id": 475,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18523:0:0"
                  },
                  "scope": 520,
                  "src": "18478:46:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    160
                  ],
                  "body": null,
                  "documentation": {
                    "id": 477,
                    "nodeType": "StructuredDocumentation",
                    "src": "18530: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": "18716:8:0"
                  },
                  "parameters": {
                    "id": 478,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18704:2:0"
                  },
                  "returnParameters": {
                    "id": 480,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "18724:0:0"
                  },
                  "scope": 520,
                  "src": "18682:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 482,
                    "nodeType": "StructuredDocumentation",
                    "src": "18731: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": "19017:2:0"
                  },
                  "returnParameters": {
                    "id": 486,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 485,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 487,
                        "src": "19043:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 484,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19043:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19042:9:0"
                  },
                  "scope": 520,
                  "src": "18982:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 488,
                    "nodeType": "StructuredDocumentation",
                    "src": "19058: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": "19550:2:0"
                  },
                  "returnParameters": {
                    "id": 500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 491,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 501,
                        "src": "19576:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 490,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19576: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": "19585:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 492,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19585: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": "19594:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 494,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19594: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": "19603:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 496,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19603: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": "19612:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 498,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19612:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19575:42:0"
                  },
                  "scope": 520,
                  "src": "19527:91:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 502,
                    "nodeType": "StructuredDocumentation",
                    "src": "19624: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": "19877:2:0"
                  },
                  "returnParameters": {
                    "id": 510,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 505,
                        "mutability": "mutable",
                        "name": "total",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 511,
                        "src": "19903:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 504,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19903: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": "19918:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19918: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": "19937:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 508,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19937:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "19902:52:0"
                  },
                  "scope": 520,
                  "src": "19854:101:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 512,
                    "nodeType": "StructuredDocumentation",
                    "src": "19961: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": "20300:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 513,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20300:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20299:13:0"
                  },
                  "returnParameters": {
                    "id": 518,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 517,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 519,
                        "src": "20336:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 516,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20336:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20335:9:0"
                  },
                  "scope": 520,
                  "src": "20261:84:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "7164:13184:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 521,
                "nodeType": "StructuredDocumentation",
                "src": "20623:55:0",
                "text": "@title DebtLocker holds custody of LoanFDT tokens."
              },
              "fullyImplemented": false,
              "id": 588,
              "linearizedBaseContracts": [
                588
              ],
              "name": "IDebtLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 522,
                    "nodeType": "StructuredDocumentation",
                    "src": "20707:77:0",
                    "text": "@dev The Loan contract this locker is holding tokens for."
                  },
                  "functionSelector": "d285b7b4",
                  "id": 527,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 523,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20802:2:0"
                  },
                  "returnParameters": {
                    "id": 526,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 525,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 527,
                        "src": "20828:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ILoan_$520",
                          "typeString": "contract ILoan"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 524,
                          "name": "ILoan",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 520,
                          "src": "20828:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ILoan_$520",
                            "typeString": "contract ILoan"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20827:7:0"
                  },
                  "scope": 588,
                  "src": "20789:46:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 528,
                    "nodeType": "StructuredDocumentation",
                    "src": "20841:67:0",
                    "text": "@dev The Liquidity Asset this locker can claim."
                  },
                  "functionSelector": "209b2bca",
                  "id": 533,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 529,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20936:2:0"
                  },
                  "returnParameters": {
                    "id": 532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 531,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 533,
                        "src": "20962:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 530,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "20962:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "20961:8:0"
                  },
                  "scope": 588,
                  "src": "20913:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 534,
                    "nodeType": "StructuredDocumentation",
                    "src": "20976:61:0",
                    "text": "@dev The owner of this Locker (the Pool)."
                  },
                  "functionSelector": "16f0115b",
                  "id": 539,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 535,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21055:2:0"
                  },
                  "returnParameters": {
                    "id": 538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 537,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 539,
                        "src": "21081:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 536,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "21081:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21080:9:0"
                  },
                  "scope": 588,
                  "src": "21042:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 540,
                    "nodeType": "StructuredDocumentation",
                    "src": "21096:89:0",
                    "text": "@dev The Loan total principal paid at last time `claim()` was called."
                  },
                  "functionSelector": "6cb249a6",
                  "id": 545,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastPrincipalPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 541,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21216:2:0"
                  },
                  "returnParameters": {
                    "id": 544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 543,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 545,
                        "src": "21242:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 542,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21242:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21241:9:0"
                  },
                  "scope": 588,
                  "src": "21190:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 546,
                    "nodeType": "StructuredDocumentation",
                    "src": "21257:88:0",
                    "text": "@dev The Loan total interest paid at last time `claim()` was called."
                  },
                  "functionSelector": "2de520d7",
                  "id": 551,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastInterestPaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 547,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21375:2:0"
                  },
                  "returnParameters": {
                    "id": 550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 549,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 551,
                        "src": "21401:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21401:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21400:9:0"
                  },
                  "scope": 588,
                  "src": "21350:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 552,
                    "nodeType": "StructuredDocumentation",
                    "src": "21416:84:0",
                    "text": "@dev The Loan total fees paid at last time `claim()` was called."
                  },
                  "functionSelector": "e77601b9",
                  "id": 557,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastFeePaid",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 553,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21525:2:0"
                  },
                  "returnParameters": {
                    "id": 556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 555,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 557,
                        "src": "21551:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21551:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21550:9:0"
                  },
                  "scope": 588,
                  "src": "21505:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 558,
                    "nodeType": "StructuredDocumentation",
                    "src": "21566:90:0",
                    "text": "@dev The Loan total excess returned at last time `claim()` was called."
                  },
                  "functionSelector": "b2644fbc",
                  "id": 563,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastExcessReturned",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 559,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21688:2:0"
                  },
                  "returnParameters": {
                    "id": 562,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 561,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 563,
                        "src": "21714:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 560,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21714:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21713:9:0"
                  },
                  "scope": 588,
                  "src": "21661:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 564,
                    "nodeType": "StructuredDocumentation",
                    "src": "21729:91:0",
                    "text": "@dev The Loan total default suffered at last time `claim()` was called."
                  },
                  "functionSelector": "3dedc1b0",
                  "id": 569,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastDefaultSuffered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 565,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "21853:2:0"
                  },
                  "returnParameters": {
                    "id": 568,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 567,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 569,
                        "src": "21879:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 566,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21879:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "21878:9:0"
                  },
                  "scope": 588,
                  "src": "21825:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 570,
                    "nodeType": "StructuredDocumentation",
                    "src": "21894:112:0",
                    "text": "@dev Then Liquidity Asset (a.k.a. loan asset) recovered from liquidation of Loan collateral."
                  },
                  "functionSelector": "f5396d96",
                  "id": 575,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lastAmountRecovered",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22039:2:0"
                  },
                  "returnParameters": {
                    "id": 574,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 573,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 575,
                        "src": "22065:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 572,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22065:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "22064:9:0"
                  },
                  "scope": 588,
                  "src": "22011:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 576,
                    "nodeType": "StructuredDocumentation",
                    "src": "22080:451:0",
                    "text": "@dev    Claims funds distribution for Loan via LoanFDT. \n@dev    Only the Pool can call this function. \n@return [0] => Total Claimed.\n[1] => Interest Claimed.\n[2] => Principal Claimed.\n[3] => Pool Delegate Fee Claimed.\n[4] => Excess Returned Claimed.\n[5] => Amount Recovered (from Liquidation).\n[6] => Default Suffered."
                  },
                  "functionSelector": "4e71d92d",
                  "id": 583,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "claim",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 577,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22550:2:0"
                  },
                  "returnParameters": {
                    "id": 582,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 581,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 583,
                        "src": "22571:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 578,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "22571:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 580,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "22579:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "22571:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "22570:19:0"
                  },
                  "scope": 588,
                  "src": "22536:54:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 584,
                    "nodeType": "StructuredDocumentation",
                    "src": "22596:126:0",
                    "text": "@dev Liquidates a Loan that is held by this contract. \n@dev Only the Pool can call this function. "
                  },
                  "functionSelector": "175f8329",
                  "id": 587,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 585,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22750:2:0"
                  },
                  "returnParameters": {
                    "id": 586,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "22761:0:0"
                  },
                  "scope": 588,
                  "src": "22727:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "20678:2087:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 589,
                "nodeType": "StructuredDocumentation",
                "src": "22861:71:0",
                "text": "@title SubFactory creates instances downstream of another factory."
              },
              "fullyImplemented": false,
              "id": 596,
              "linearizedBaseContracts": [
                596
              ],
              "name": "ISubFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 590,
                    "nodeType": "StructuredDocumentation",
                    "src": "22961:48:0",
                    "text": "@dev The type of the factory"
                  },
                  "functionSelector": "64e1fd55",
                  "id": 595,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 591,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "23034:2:0"
                  },
                  "returnParameters": {
                    "id": 594,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 593,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 595,
                        "src": "23060:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 592,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "23060:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23059:7:0"
                  },
                  "scope": 596,
                  "src": "23014:53:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "22932:138:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 598,
                    "name": "ISubFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 596,
                    "src": "23349:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISubFactory_$596",
                      "typeString": "contract ISubFactory"
                    }
                  },
                  "id": 599,
                  "nodeType": "InheritanceSpecifier",
                  "src": "23349:11:0"
                }
              ],
              "contractDependencies": [
                596
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 597,
                "nodeType": "StructuredDocumentation",
                "src": "23262:55:0",
                "text": "@title DebtLockerFactory instantiates DebtLockers."
              },
              "fullyImplemented": false,
              "id": 640,
              "linearizedBaseContracts": [
                640,
                596
              ],
              "name": "IDebtLockerFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 600,
                    "nodeType": "StructuredDocumentation",
                    "src": "23368:249:0",
                    "text": "@dev   Emits an event indicating a DebtLocker was created.\n@param owner      The owner of the DebtLocker.\n@param debtLocker The address of the DebtLocker.\n@param loan       The Loan tied to the DebtLocker."
                  },
                  "id": 608,
                  "name": "DebtLockerCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 607,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 602,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 608,
                        "src": "23646:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 601,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23646:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 604,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 608,
                        "src": "23669:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 603,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23669:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 606,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 608,
                        "src": "23689:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 605,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23689:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23645:57:0"
                  },
                  "src": "23622:81:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 609,
                    "nodeType": "StructuredDocumentation",
                    "src": "23709:139:0",
                    "text": "@param  debtLocker The address of a DebtLocker.\n@return The address of the owner of DebtLocker at `debtLocker`."
                  },
                  "functionSelector": "666e1b39",
                  "id": 616,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 612,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 611,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 616,
                        "src": "23868:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 610,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23868:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23867:20:0"
                  },
                  "returnParameters": {
                    "id": 615,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 614,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 616,
                        "src": "23911:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 613,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "23911:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "23910:9:0"
                  },
                  "scope": 640,
                  "src": "23853:67:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 617,
                    "nodeType": "StructuredDocumentation",
                    "src": "23926:106:0",
                    "text": "@param  debtLocker Some address.\n@return Whether `debtLocker` is a DebtLocker."
                  },
                  "functionSelector": "2ec63d7c",
                  "id": 624,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 620,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 619,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 624,
                        "src": "24055:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 618,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24055:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24054:20:0"
                  },
                  "returnParameters": {
                    "id": 623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 622,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 624,
                        "src": "24098:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 621,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "24098:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24097:6:0"
                  },
                  "scope": 640,
                  "src": "24037:67:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    595
                  ],
                  "body": null,
                  "documentation": {
                    "id": 625,
                    "nodeType": "StructuredDocumentation",
                    "src": "24110:88:0",
                    "text": "@dev The type of the factory (i.e FactoryType::DEBT_LOCKER_FACTORY)."
                  },
                  "functionSelector": "64e1fd55",
                  "id": 631,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 627,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "24235:8:0"
                  },
                  "parameters": {
                    "id": 626,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "24223:2:0"
                  },
                  "returnParameters": {
                    "id": 630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 629,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 631,
                        "src": "24258:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 628,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "24258:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24257:7:0"
                  },
                  "scope": 640,
                  "src": "24203:62:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 632,
                    "nodeType": "StructuredDocumentation",
                    "src": "24271:250:0",
                    "text": "@dev    Instantiates a DebtLocker. \n@dev    It emits a `DebtLockerCreated` event. \n@param  loan       The Loan this DebtLocker will be tied to.\n@return debtLocker The address of the instantiated DebtLocker."
                  },
                  "functionSelector": "19eb783a",
                  "id": 639,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "newLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 635,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 634,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "24545:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 633,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24545:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24544:14:0"
                  },
                  "returnParameters": {
                    "id": 638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 637,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 639,
                        "src": "24577:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 636,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "24577:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24576:20:0"
                  },
                  "scope": 640,
                  "src": "24526:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "23317:1283:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 661,
              "linearizedBaseContracts": [
                661
              ],
              "name": "SafeMathInt",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 659,
                    "nodeType": "Block",
                    "src": "24776:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 648,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 642,
                                "src": "24794:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 649,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "24799:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "24794:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534d493a4e4547",
                              "id": 651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "24802:9:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7f8f36ed7822abb9a7af4802b9b67b650ae68495c0b71826aaa5876de2b35b33",
                                "typeString": "literal_string \"SMI:NEG\""
                              },
                              "value": "SMI:NEG"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7f8f36ed7822abb9a7af4802b9b67b650ae68495c0b71826aaa5876de2b35b33",
                                "typeString": "literal_string \"SMI:NEG\""
                              }
                            ],
                            "id": 647,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "24786:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24786:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 653,
                        "nodeType": "ExpressionStatement",
                        "src": "24786:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 656,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 642,
                              "src": "24837:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 655,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "24829:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 654,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "24829:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24829:10:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 646,
                        "id": 658,
                        "nodeType": "Return",
                        "src": "24822:17:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 660,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint256Safe",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 643,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 642,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 660,
                        "src": "24734:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 641,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24734:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24733:10:0"
                  },
                  "returnParameters": {
                    "id": 646,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 645,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 660,
                        "src": "24767:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 644,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24767:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24766:9:0"
                  },
                  "scope": 661,
                  "src": "24711:135:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "24684:165:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 684,
              "linearizedBaseContracts": [
                684
              ],
              "name": "SafeMathUint",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 682,
                    "nodeType": "Block",
                    "src": "25028:66:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 668,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 666,
                            "src": "25038:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 671,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 663,
                                "src": "25049:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 670,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25042:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int256_$",
                                "typeString": "type(int256)"
                              },
                              "typeName": {
                                "id": 669,
                                "name": "int256",
                                "nodeType": "ElementaryTypeName",
                                "src": "25042:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 672,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25042:9:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "25038:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 674,
                        "nodeType": "ExpressionStatement",
                        "src": "25038:13:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 676,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 666,
                                "src": "25069:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25074:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "25069:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "534d553a4f4f42",
                              "id": 679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25077:9:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e1296ae3df521f6e35a0f57bb23513ad91c86287a7ab7f6fbae7c6861fccaa61",
                                "typeString": "literal_string \"SMU:OOB\""
                              },
                              "value": "SMU:OOB"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e1296ae3df521f6e35a0f57bb23513ad91c86287a7ab7f6fbae7c6861fccaa61",
                                "typeString": "literal_string \"SMU:OOB\""
                              }
                            ],
                            "id": 675,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25061:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25061:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 681,
                        "nodeType": "ExpressionStatement",
                        "src": "25061:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 683,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt256Safe",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 664,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 663,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 683,
                        "src": "24984:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 662,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24984:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "24983:11:0"
                  },
                  "returnParameters": {
                    "id": 667,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 666,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 683,
                        "src": "25018:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 665,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25018:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "25017:10:0"
                  },
                  "scope": 684,
                  "src": "24962:132:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "24934:163:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 685,
                "nodeType": "StructuredDocumentation",
                "src": "25200:563:0",
                "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow\n checks.\n Arithmetic operations in Solidity wrap on overflow. This can easily result\n in bugs, because programmers usually assume that an overflow raises an\n error, which is the standard behavior in high level programming languages.\n `SafeMath` restores this intuition by reverting the transaction when an\n operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."
              },
              "fullyImplemented": true,
              "id": 878,
              "linearizedBaseContracts": [
                878
              ],
              "name": "SafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 710,
                    "nodeType": "Block",
                    "src": "26083:109:0",
                    "statements": [
                      {
                        "assignments": [
                          696
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 696,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 710,
                            "src": "26093:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 695,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "26093:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 700,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 697,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 688,
                            "src": "26105:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 698,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 690,
                            "src": "26109:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26105:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "26093:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 704,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 702,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 696,
                                "src": "26128:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 703,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 688,
                                "src": "26133:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "26128:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 705,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26136:29:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              },
                              "value": "SafeMath: addition overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a",
                                "typeString": "literal_string \"SafeMath: addition overflow\""
                              }
                            ],
                            "id": 701,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "26120:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26120:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 707,
                        "nodeType": "ExpressionStatement",
                        "src": "26120:46:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 708,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 696,
                          "src": "26184:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 694,
                        "id": 709,
                        "nodeType": "Return",
                        "src": "26177:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 686,
                    "nodeType": "StructuredDocumentation",
                    "src": "25787:224:0",
                    "text": " @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."
                  },
                  "id": 711,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 691,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 688,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 711,
                        "src": "26029:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 687,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26029:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 690,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 711,
                        "src": "26040:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 689,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26040:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26028:22:0"
                  },
                  "returnParameters": {
                    "id": 694,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 693,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 711,
                        "src": "26074:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 692,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26074:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26073:9:0"
                  },
                  "scope": 878,
                  "src": "26016:176:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 727,
                    "nodeType": "Block",
                    "src": "26530:67:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 722,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 714,
                              "src": "26551:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 723,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 716,
                              "src": "26554:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26557:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              },
                              "value": "SafeMath: subtraction overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862",
                                "typeString": "literal_string \"SafeMath: subtraction overflow\""
                              }
                            ],
                            "id": 721,
                            "name": "sub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              728,
                              756
                            ],
                            "referencedDeclaration": 756,
                            "src": "26547:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26547:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 720,
                        "id": 726,
                        "nodeType": "Return",
                        "src": "26540:50:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 712,
                    "nodeType": "StructuredDocumentation",
                    "src": "26198:260:0",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 728,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 717,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 714,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 728,
                        "src": "26476:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 713,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26476:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 716,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 728,
                        "src": "26487:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 715,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26487:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26475:22:0"
                  },
                  "returnParameters": {
                    "id": 720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 719,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 728,
                        "src": "26521:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 718,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26521:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26520:9:0"
                  },
                  "scope": 878,
                  "src": "26463:134:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 755,
                    "nodeType": "Block",
                    "src": "26983:92:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 743,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 741,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 733,
                                "src": "27001:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 742,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 731,
                                "src": "27006:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "27001:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 744,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 735,
                              "src": "27009:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 740,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "26993:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26993:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 746,
                        "nodeType": "ExpressionStatement",
                        "src": "26993:29:0"
                      },
                      {
                        "assignments": [
                          748
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 748,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 755,
                            "src": "27032:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 747,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "27032:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 752,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 749,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 731,
                            "src": "27044:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 750,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 733,
                            "src": "27048:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27044:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27032:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 753,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 748,
                          "src": "27067:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 739,
                        "id": 754,
                        "nodeType": "Return",
                        "src": "27060:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 729,
                    "nodeType": "StructuredDocumentation",
                    "src": "26603:280:0",
                    "text": " @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 756,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 736,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 731,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26901:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 730,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26901:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 733,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26912:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 732,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26912:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 735,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26923:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 734,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "26923:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26900:50:0"
                  },
                  "returnParameters": {
                    "id": 739,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 738,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 756,
                        "src": "26974:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 737,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26974:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "26973:9:0"
                  },
                  "scope": 878,
                  "src": "26888:187:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 790,
                    "nodeType": "Block",
                    "src": "27389:392:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 766,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 759,
                            "src": "27621:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 767,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "27626:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "27621:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 772,
                        "nodeType": "IfStatement",
                        "src": "27617:45:0",
                        "trueBody": {
                          "id": 771,
                          "nodeType": "Block",
                          "src": "27629:33:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "27650:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 765,
                              "id": 770,
                              "nodeType": "Return",
                              "src": "27643:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          774
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 774,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 790,
                            "src": "27672:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 773,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "27672:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 778,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 775,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 759,
                            "src": "27684:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 776,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 761,
                            "src": "27688:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27684:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27672:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 784,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 780,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 774,
                                  "src": "27707:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 781,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 759,
                                  "src": "27711:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27707:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 783,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 761,
                                "src": "27716:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "27707:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 785,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27719:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              },
                              "value": "SafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3",
                                "typeString": "literal_string \"SafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 779,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "27699:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 786,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27699:56:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 787,
                        "nodeType": "ExpressionStatement",
                        "src": "27699:56:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 788,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 774,
                          "src": "27773:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 765,
                        "id": 789,
                        "nodeType": "Return",
                        "src": "27766:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 757,
                    "nodeType": "StructuredDocumentation",
                    "src": "27081:236:0",
                    "text": " @dev Returns the multiplication of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."
                  },
                  "id": 791,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 762,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 759,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 791,
                        "src": "27335:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 758,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27335:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 761,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 791,
                        "src": "27346:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 760,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27346:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "27334:22:0"
                  },
                  "returnParameters": {
                    "id": 765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 764,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 791,
                        "src": "27380:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 763,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27380:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "27379:9:0"
                  },
                  "scope": 878,
                  "src": "27322:459:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 807,
                    "nodeType": "Block",
                    "src": "28310:63:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 802,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 794,
                              "src": "28331:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 803,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 796,
                              "src": "28334:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "28337:28:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              },
                              "value": "SafeMath: division by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f",
                                "typeString": "literal_string \"SafeMath: division by zero\""
                              }
                            ],
                            "id": 801,
                            "name": "div",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              808,
                              836
                            ],
                            "referencedDeclaration": 836,
                            "src": "28327:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28327:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 800,
                        "id": 806,
                        "nodeType": "Return",
                        "src": "28320:46:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 792,
                    "nodeType": "StructuredDocumentation",
                    "src": "27787:451:0",
                    "text": " @dev Returns the integer division of two unsigned integers. Reverts on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 808,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 797,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 794,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 808,
                        "src": "28256:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 793,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28256:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 796,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 808,
                        "src": "28267:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 795,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28267:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28255:22:0"
                  },
                  "returnParameters": {
                    "id": 800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 799,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 808,
                        "src": "28301:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28301:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28300:9:0"
                  },
                  "scope": 878,
                  "src": "28243:130:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 835,
                    "nodeType": "Block",
                    "src": "28950:177:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 821,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 813,
                                "src": "28968:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "28972:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "28968:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 824,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 815,
                              "src": "28975:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 820,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "28960:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "28960:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 826,
                        "nodeType": "ExpressionStatement",
                        "src": "28960:28:0"
                      },
                      {
                        "assignments": [
                          828
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 828,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 835,
                            "src": "28998:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 827,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "28998:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 832,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 829,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 811,
                            "src": "29010:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 830,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 813,
                            "src": "29014:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "29010:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "28998:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 833,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 828,
                          "src": "29119:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 819,
                        "id": 834,
                        "nodeType": "Return",
                        "src": "29112:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 809,
                    "nodeType": "StructuredDocumentation",
                    "src": "28379:471:0",
                    "text": " @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 836,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 816,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 811,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28868:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 810,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28868:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 813,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28879:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 812,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28879:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 815,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28890:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 814,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "28890:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28867:50:0"
                  },
                  "returnParameters": {
                    "id": 819,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 818,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 836,
                        "src": "28941:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 817,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28941:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "28940:9:0"
                  },
                  "scope": 878,
                  "src": "28855:272:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 852,
                    "nodeType": "Block",
                    "src": "29645:61:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 847,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 839,
                              "src": "29666:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 848,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 841,
                              "src": "29669:1:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536166654d6174683a206d6f64756c6f206279207a65726f",
                              "id": 849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "29672:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              },
                              "value": "SafeMath: modulo by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832",
                                "typeString": "literal_string \"SafeMath: modulo by zero\""
                              }
                            ],
                            "id": 846,
                            "name": "mod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              853,
                              877
                            ],
                            "referencedDeclaration": 877,
                            "src": "29662:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29662:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 845,
                        "id": 851,
                        "nodeType": "Return",
                        "src": "29655:44:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 837,
                    "nodeType": "StructuredDocumentation",
                    "src": "29133:440:0",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 853,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 842,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 839,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 853,
                        "src": "29591:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29591:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 841,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 853,
                        "src": "29602:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 840,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29602:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29590:22:0"
                  },
                  "returnParameters": {
                    "id": 845,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 844,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 853,
                        "src": "29636:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 843,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29636:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "29635:9:0"
                  },
                  "scope": 878,
                  "src": "29578:128:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 876,
                    "nodeType": "Block",
                    "src": "30272:68:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 868,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 866,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 858,
                                "src": "30290:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 867,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "30295:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "30290:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 869,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 860,
                              "src": "30298:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 865,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "30282:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 870,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "30282:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 871,
                        "nodeType": "ExpressionStatement",
                        "src": "30282:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 872,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 856,
                            "src": "30328:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 873,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 858,
                            "src": "30332:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30328:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 864,
                        "id": 875,
                        "nodeType": "Return",
                        "src": "30321:12:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 854,
                    "nodeType": "StructuredDocumentation",
                    "src": "29712:460:0",
                    "text": " @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts with custom message when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 877,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 861,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 856,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30190:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 855,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30190:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 858,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30201:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 857,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30201:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 860,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30212:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 859,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "30212:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30189:50:0"
                  },
                  "returnParameters": {
                    "id": 864,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 863,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 877,
                        "src": "30263:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 862,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30263:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30262:9:0"
                  },
                  "scope": 878,
                  "src": "30177:163:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "25764:4578:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 879,
                "nodeType": "StructuredDocumentation",
                "src": "30451:104:0",
                "text": " @title SignedSafeMath\n @dev Signed math operations with safety checks that revert on error."
              },
              "fullyImplemented": true,
              "id": 1055,
              "linearizedBaseContracts": [
                1055
              ],
              "name": "SignedSafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "id": 885,
                  "mutability": "constant",
                  "name": "_INT256_MIN",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1055,
                  "src": "30585:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 880,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30585:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_minus_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const -578...(70 digits omitted)...9968"
                    },
                    "id": 884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 882,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "30623:2:0",
                      "subExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "30624:1:0",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_minus_2_by_1",
                        "typeString": "int_const -2"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "323535",
                      "id": 883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30627:3:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "30623:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_minus_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const -578...(70 digits omitted)...9968"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 933,
                    "nodeType": "Block",
                    "src": "30940:490:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 895,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 888,
                            "src": "31172:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 896,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "31177:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "31172:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 901,
                        "nodeType": "IfStatement",
                        "src": "31168:45:0",
                        "trueBody": {
                          "id": 900,
                          "nodeType": "Block",
                          "src": "31180:33:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 898,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "31201:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 894,
                              "id": 899,
                              "nodeType": "Return",
                              "src": "31194:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 912,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "31231:30:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 910,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 906,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 903,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 888,
                                        "src": "31233:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "31238:2:0",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 904,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "31239:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      },
                                      "src": "31233:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 909,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 907,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 890,
                                        "src": "31244:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 908,
                                        "name": "_INT256_MIN",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 885,
                                        "src": "31249:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "31244:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "31233:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 911,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "31232:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 913,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31263:41:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              },
                              "value": "SignedSafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 902,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "31223:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31223:82:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 915,
                        "nodeType": "ExpressionStatement",
                        "src": "31223:82:0"
                      },
                      {
                        "assignments": [
                          917
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 917,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 933,
                            "src": "31316:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 916,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "31316:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 921,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 920,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 918,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 888,
                            "src": "31327:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 919,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 890,
                            "src": "31331:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "31327:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "31316:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 927,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 925,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 923,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 917,
                                  "src": "31350:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 924,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 888,
                                  "src": "31354:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "31350:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 926,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 890,
                                "src": "31359:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "31350:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77",
                              "id": 928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31362:41:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              },
                              "value": "SignedSafeMath: multiplication overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954",
                                "typeString": "literal_string \"SignedSafeMath: multiplication overflow\""
                              }
                            ],
                            "id": 922,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "31342:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31342:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 930,
                        "nodeType": "ExpressionStatement",
                        "src": "31342:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 931,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 917,
                          "src": "31422:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 894,
                        "id": 932,
                        "nodeType": "Return",
                        "src": "31415:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 886,
                    "nodeType": "StructuredDocumentation",
                    "src": "30637:234:0",
                    "text": " @dev Returns the multiplication of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."
                  },
                  "id": 934,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 891,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 888,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 934,
                        "src": "30889:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 887,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30889:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 890,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 934,
                        "src": "30899:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 889,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30899:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30888:20:0"
                  },
                  "returnParameters": {
                    "id": 894,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 893,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 934,
                        "src": "30932:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 892,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30932:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "30931:8:0"
                  },
                  "scope": 1055,
                  "src": "30876:554:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 973,
                    "nodeType": "Block",
                    "src": "31954:200:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 947,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 945,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 939,
                                "src": "31972:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 946,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "31977:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "31972:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206279207a65726f",
                              "id": 948,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31980:34:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ebc4d0068c2e029285c70894a725032247a74fcdc822ba305ea67dbddf7750bd",
                                "typeString": "literal_string \"SignedSafeMath: division by zero\""
                              },
                              "value": "SignedSafeMath: division by zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ebc4d0068c2e029285c70894a725032247a74fcdc822ba305ea67dbddf7750bd",
                                "typeString": "literal_string \"SignedSafeMath: division by zero\""
                              }
                            ],
                            "id": 944,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "31964:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "31964:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 950,
                        "nodeType": "ExpressionStatement",
                        "src": "31964:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 961,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "32033:30:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 959,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 955,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 952,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 939,
                                        "src": "32035:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 954,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "32040:2:0",
                                        "subExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 953,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "32041:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_minus_1_by_1",
                                          "typeString": "int_const -1"
                                        }
                                      },
                                      "src": "32035:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 958,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 956,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 937,
                                        "src": "32046:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 957,
                                        "name": "_INT256_MIN",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 885,
                                        "src": "32051:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32046:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32035:27:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 960,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32034:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77",
                              "id": 962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32065:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_7bc0f3df013376568eb9f7cb8999198097051f79bdb4d07d83447767f5224b81",
                                "typeString": "literal_string \"SignedSafeMath: division overflow\""
                              },
                              "value": "SignedSafeMath: division overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_7bc0f3df013376568eb9f7cb8999198097051f79bdb4d07d83447767f5224b81",
                                "typeString": "literal_string \"SignedSafeMath: division overflow\""
                              }
                            ],
                            "id": 951,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "32025:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 963,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32025:76:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 964,
                        "nodeType": "ExpressionStatement",
                        "src": "32025:76:0"
                      },
                      {
                        "assignments": [
                          966
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 966,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 973,
                            "src": "32112:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 965,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32112:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 970,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 967,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 937,
                            "src": "32123:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 968,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 939,
                            "src": "32127:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32123:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32112:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 971,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 966,
                          "src": "32146:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 943,
                        "id": 972,
                        "nodeType": "Return",
                        "src": "32139:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 935,
                    "nodeType": "StructuredDocumentation",
                    "src": "31436:449:0",
                    "text": " @dev Returns the integer division of two signed integers. Reverts on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."
                  },
                  "id": 974,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 940,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 937,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 974,
                        "src": "31903:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 936,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31903:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 939,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 974,
                        "src": "31913:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 938,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31913:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "31902:20:0"
                  },
                  "returnParameters": {
                    "id": 943,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 942,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 974,
                        "src": "31946:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 941,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31946:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "31945:8:0"
                  },
                  "scope": 1055,
                  "src": "31890:264:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1013,
                    "nodeType": "Block",
                    "src": "32457:149:0",
                    "statements": [
                      {
                        "assignments": [
                          985
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 985,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1013,
                            "src": "32467:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 984,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32467:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 989,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 986,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 977,
                            "src": "32478:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 987,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 979,
                            "src": "32482:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32478:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32467:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 997,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 993,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 991,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 979,
                                        "src": "32502:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 992,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32507:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32502:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 996,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 994,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 985,
                                        "src": "32512:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 995,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 977,
                                        "src": "32517:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32512:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32502:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 998,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32501:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 1005,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1001,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 999,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 979,
                                        "src": "32524:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1000,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32528:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32524:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1004,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1002,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 985,
                                        "src": "32533:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1003,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 977,
                                        "src": "32537:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32533:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32524:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1006,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32523:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "32501:38:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77",
                              "id": 1008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32541:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_dfe37ab0612d67daeef366062296f3ebcaf7e2cc3eb392bf66a6cb5a7bed3bcd",
                                "typeString": "literal_string \"SignedSafeMath: subtraction overflow\""
                              },
                              "value": "SignedSafeMath: subtraction overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_dfe37ab0612d67daeef366062296f3ebcaf7e2cc3eb392bf66a6cb5a7bed3bcd",
                                "typeString": "literal_string \"SignedSafeMath: subtraction overflow\""
                              }
                            ],
                            "id": 990,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "32493:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32493:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1010,
                        "nodeType": "ExpressionStatement",
                        "src": "32493:87:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1011,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 985,
                          "src": "32598:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 983,
                        "id": 1012,
                        "nodeType": "Return",
                        "src": "32591:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 975,
                    "nodeType": "StructuredDocumentation",
                    "src": "32160:228:0",
                    "text": " @dev Returns the subtraction of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."
                  },
                  "id": 1014,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 977,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1014,
                        "src": "32406:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 976,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32406:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 979,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1014,
                        "src": "32416:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 978,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32416:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32405:20:0"
                  },
                  "returnParameters": {
                    "id": 983,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 982,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1014,
                        "src": "32449:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 981,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32449:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32448:8:0"
                  },
                  "scope": 1055,
                  "src": "32393:213:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1053,
                    "nodeType": "Block",
                    "src": "32903:146:0",
                    "statements": [
                      {
                        "assignments": [
                          1025
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1025,
                            "mutability": "mutable",
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1053,
                            "src": "32913:8:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1024,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "32913:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1029,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1026,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1017,
                            "src": "32924:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1027,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1019,
                            "src": "32928:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32924:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "32913:16:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 1047,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 1037,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1033,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1031,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1019,
                                        "src": "32948:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1032,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32953:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32948:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1036,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1034,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1025,
                                        "src": "32958:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1035,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1017,
                                        "src": "32963:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32958:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32948:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1038,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32947:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 1045,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1041,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1039,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1019,
                                        "src": "32970:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1040,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "32974:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "32970:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 1044,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 1042,
                                        "name": "c",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1025,
                                        "src": "32979:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 1043,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1017,
                                        "src": "32983:1:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "32979:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "32970:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 1046,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "32969:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "32947:38:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77",
                              "id": 1048,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32987:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_47c8d4a3974eee4fcf9925cffefc088ed6ac723b55fb65cf621edb1b7db7b8eb",
                                "typeString": "literal_string \"SignedSafeMath: addition overflow\""
                              },
                              "value": "SignedSafeMath: addition overflow"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_47c8d4a3974eee4fcf9925cffefc088ed6ac723b55fb65cf621edb1b7db7b8eb",
                                "typeString": "literal_string \"SignedSafeMath: addition overflow\""
                              }
                            ],
                            "id": 1030,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "32939:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32939:84:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1050,
                        "nodeType": "ExpressionStatement",
                        "src": "32939:84:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1051,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1025,
                          "src": "33041:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 1023,
                        "id": 1052,
                        "nodeType": "Return",
                        "src": "33034:8:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1015,
                    "nodeType": "StructuredDocumentation",
                    "src": "32612:222:0",
                    "text": " @dev Returns the addition of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."
                  },
                  "id": 1054,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1020,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1017,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1054,
                        "src": "32852:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1016,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32852:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1019,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1054,
                        "src": "32862:8:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1018,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32862:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32851:20:0"
                  },
                  "returnParameters": {
                    "id": 1023,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1022,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1054,
                        "src": "32895:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1021,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32895:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "32894:8:0"
                  },
                  "scope": 1055,
                  "src": "32839:210:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "30556:2495:0"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 1076,
              "linearizedBaseContracts": [
                1076
              ],
              "name": "Context",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 1063,
                    "nodeType": "Block",
                    "src": "33754:34:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1060,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "33771:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "33771:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "functionReturnParameters": 1059,
                        "id": 1062,
                        "nodeType": "Return",
                        "src": "33764:17:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 1064,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1056,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "33703:2:0"
                  },
                  "returnParameters": {
                    "id": 1059,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1058,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1064,
                        "src": "33737:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 1057,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "33737:15:0",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "33736:17:0"
                  },
                  "scope": 1076,
                  "src": "33684:104:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1074,
                    "nodeType": "Block",
                    "src": "33859:165:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1069,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "33869:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Context_$1076",
                            "typeString": "contract Context"
                          }
                        },
                        "id": 1070,
                        "nodeType": "ExpressionStatement",
                        "src": "33869:4:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1071,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "34009:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "34009:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 1068,
                        "id": 1073,
                        "nodeType": "Return",
                        "src": "34002:15:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 1075,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1065,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "33811:2:0"
                  },
                  "returnParameters": {
                    "id": 1068,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1067,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1075,
                        "src": "33845:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1066,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "33845:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "33844:14:0"
                  },
                  "scope": 1076,
                  "src": "33794:230:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "33652:374:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1078,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1076,
                    "src": "35422:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$1076",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 1079,
                  "nodeType": "InheritanceSpecifier",
                  "src": "35422:7:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1080,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "35431:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 1081,
                  "nodeType": "InheritanceSpecifier",
                  "src": "35431:6:0"
                }
              ],
              "contractDependencies": [
                77,
                1076
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1077,
                "nodeType": "StructuredDocumentation",
                "src": "34241:1162:0",
                "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
              },
              "fullyImplemented": true,
              "id": 1574,
              "linearizedBaseContracts": [
                1574,
                77,
                1076
              ],
              "name": "ERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1084,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1082,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "35450:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "35444:27:0",
                  "typeName": {
                    "id": 1083,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35463:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 1088,
                  "mutability": "mutable",
                  "name": "_balances",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35477:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 1087,
                    "keyType": {
                      "id": 1085,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "35486:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "35477:28:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 1086,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "35497:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1094,
                  "mutability": "mutable",
                  "name": "_allowances",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35530:69:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 1093,
                    "keyType": {
                      "id": 1089,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "35539:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "35530:49:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 1092,
                      "keyType": {
                        "id": 1090,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "35559:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "35550:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 1091,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "35570:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1096,
                  "mutability": "mutable",
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35606:28:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1095,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35606:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1098,
                  "mutability": "mutable",
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35641:20:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1097,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "35641:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1100,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35667:22:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1099,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "35667:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "constant": false,
                  "id": 1102,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1574,
                  "src": "35695:23:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1101,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "35695:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1122,
                    "nodeType": "Block",
                    "src": "36105:81:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1112,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1110,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1098,
                            "src": "36115:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1111,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1105,
                            "src": "36123:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "36115:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1113,
                        "nodeType": "ExpressionStatement",
                        "src": "36115:13:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1114,
                            "name": "_symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1100,
                            "src": "36138:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1115,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1107,
                            "src": "36148:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "36138:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1117,
                        "nodeType": "ExpressionStatement",
                        "src": "36138:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1118,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "36165:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "3138",
                            "id": 1119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "36177:2:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_18_by_1",
                              "typeString": "int_const 18"
                            },
                            "value": "18"
                          },
                          "src": "36165:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 1121,
                        "nodeType": "ExpressionStatement",
                        "src": "36165:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1103,
                    "nodeType": "StructuredDocumentation",
                    "src": "35725:311:0",
                    "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."
                  },
                  "id": 1123,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1108,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1105,
                        "mutability": "mutable",
                        "name": "name_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1123,
                        "src": "36054:19:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1104,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36054:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1107,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1123,
                        "src": "36075:21:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1106,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36075:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "36053:44:0"
                  },
                  "returnParameters": {
                    "id": 1109,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36105:0:0"
                  },
                  "scope": 1574,
                  "src": "36041:145:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1131,
                    "nodeType": "Block",
                    "src": "36303:29:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1129,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1098,
                          "src": "36320:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 1128,
                        "id": 1130,
                        "nodeType": "Return",
                        "src": "36313:12:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1124,
                    "nodeType": "StructuredDocumentation",
                    "src": "36192:54:0",
                    "text": " @dev Returns the name of the token."
                  },
                  "functionSelector": "06fdde03",
                  "id": 1132,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1125,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36264:2:0"
                  },
                  "returnParameters": {
                    "id": 1128,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1127,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1132,
                        "src": "36288:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1126,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36288:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "36287:15:0"
                  },
                  "scope": 1574,
                  "src": "36251:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1140,
                    "nodeType": "Block",
                    "src": "36499:31:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1138,
                          "name": "_symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1100,
                          "src": "36516:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 1137,
                        "id": 1139,
                        "nodeType": "Return",
                        "src": "36509:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1133,
                    "nodeType": "StructuredDocumentation",
                    "src": "36338:102:0",
                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                  },
                  "functionSelector": "95d89b41",
                  "id": 1141,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1134,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "36460:2:0"
                  },
                  "returnParameters": {
                    "id": 1137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1136,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1141,
                        "src": "36484:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1135,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "36484:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "36483:15:0"
                  },
                  "scope": 1574,
                  "src": "36445:85:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1149,
                    "nodeType": "Block",
                    "src": "37201:33:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1147,
                          "name": "_decimals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1102,
                          "src": "37218:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 1146,
                        "id": 1148,
                        "nodeType": "Return",
                        "src": "37211:16:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1142,
                    "nodeType": "StructuredDocumentation",
                    "src": "36536:612:0",
                    "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                  },
                  "functionSelector": "313ce567",
                  "id": 1150,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1143,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "37170:2:0"
                  },
                  "returnParameters": {
                    "id": 1146,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1145,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1150,
                        "src": "37194:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1144,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "37194:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37193:7:0"
                  },
                  "scope": 1574,
                  "src": "37153:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    8
                  ],
                  "body": {
                    "id": 1159,
                    "nodeType": "Block",
                    "src": "37356:36:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1157,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1096,
                          "src": "37373:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1156,
                        "id": 1158,
                        "nodeType": "Return",
                        "src": "37366:19:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1151,
                    "nodeType": "StructuredDocumentation",
                    "src": "37240:49:0",
                    "text": " @dev See {IERC20-totalSupply}."
                  },
                  "functionSelector": "18160ddd",
                  "id": 1160,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1153,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "37329:8:0"
                  },
                  "parameters": {
                    "id": 1152,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "37314:2:0"
                  },
                  "returnParameters": {
                    "id": 1156,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1155,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1160,
                        "src": "37347:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1154,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37347:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37346:9:0"
                  },
                  "scope": 1574,
                  "src": "37294:98:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    16
                  ],
                  "body": {
                    "id": 1173,
                    "nodeType": "Block",
                    "src": "37525:42:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1169,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1088,
                            "src": "37542:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1171,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1170,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1163,
                            "src": "37552:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "37542:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1168,
                        "id": 1172,
                        "nodeType": "Return",
                        "src": "37535:25:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1161,
                    "nodeType": "StructuredDocumentation",
                    "src": "37398:47:0",
                    "text": " @dev See {IERC20-balanceOf}."
                  },
                  "functionSelector": "70a08231",
                  "id": 1174,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1165,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "37498:8:0"
                  },
                  "parameters": {
                    "id": 1164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1163,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1174,
                        "src": "37469:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "37469:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37468:17:0"
                  },
                  "returnParameters": {
                    "id": 1168,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1167,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1174,
                        "src": "37516:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37516:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37515:9:0"
                  },
                  "scope": 1574,
                  "src": "37450:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    26
                  ],
                  "body": {
                    "id": 1194,
                    "nodeType": "Block",
                    "src": "37862:80:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1186,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "37882:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1187,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "37882:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1188,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1177,
                              "src": "37896:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1189,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1179,
                              "src": "37907:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1185,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1395,
                            "src": "37872:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37872:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1191,
                        "nodeType": "ExpressionStatement",
                        "src": "37872:42:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "37931:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1184,
                        "id": 1193,
                        "nodeType": "Return",
                        "src": "37924:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1175,
                    "nodeType": "StructuredDocumentation",
                    "src": "37573:192:0",
                    "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 1195,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1181,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "37838:8:0"
                  },
                  "parameters": {
                    "id": 1180,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1177,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1195,
                        "src": "37788:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1176,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "37788:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1179,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1195,
                        "src": "37807:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1178,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "37807:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37787:35:0"
                  },
                  "returnParameters": {
                    "id": 1184,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1183,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1195,
                        "src": "37856:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1182,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "37856:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "37855:6:0"
                  },
                  "scope": 1574,
                  "src": "37770:172:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    36
                  ],
                  "body": {
                    "id": 1212,
                    "nodeType": "Block",
                    "src": "38098:51:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1206,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1094,
                              "src": "38115:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 1208,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1207,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1198,
                              "src": "38127:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "38115:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1210,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1209,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1200,
                            "src": "38134:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "38115:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1205,
                        "id": 1211,
                        "nodeType": "Return",
                        "src": "38108:34:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1196,
                    "nodeType": "StructuredDocumentation",
                    "src": "37948:47:0",
                    "text": " @dev See {IERC20-allowance}."
                  },
                  "functionSelector": "dd62ed3e",
                  "id": 1213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1202,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "38071:8:0"
                  },
                  "parameters": {
                    "id": 1201,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1198,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1213,
                        "src": "38019:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1197,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38019:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1200,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1213,
                        "src": "38034:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1199,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38034:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38018:32:0"
                  },
                  "returnParameters": {
                    "id": 1205,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1204,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1213,
                        "src": "38089:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1203,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38089:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38088:9:0"
                  },
                  "scope": 1574,
                  "src": "38000:149:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    46
                  ],
                  "body": {
                    "id": 1233,
                    "nodeType": "Block",
                    "src": "38376:77:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1225,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "38395:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38395:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1227,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1216,
                              "src": "38409:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1228,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1218,
                              "src": "38418:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1224,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "38386:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38386:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1230,
                        "nodeType": "ExpressionStatement",
                        "src": "38386:39:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "38442:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1223,
                        "id": 1232,
                        "nodeType": "Return",
                        "src": "38435:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1214,
                    "nodeType": "StructuredDocumentation",
                    "src": "38155:127:0",
                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "095ea7b3",
                  "id": 1234,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1220,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "38352:8:0"
                  },
                  "parameters": {
                    "id": 1219,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1216,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1234,
                        "src": "38304:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1215,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38304:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1218,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1234,
                        "src": "38321:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38321:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38303:33:0"
                  },
                  "returnParameters": {
                    "id": 1223,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1222,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1234,
                        "src": "38370:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1221,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "38370:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38369:6:0"
                  },
                  "scope": 1574,
                  "src": "38287:166:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    58
                  ],
                  "body": {
                    "id": 1271,
                    "nodeType": "Block",
                    "src": "39032:205:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1248,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1237,
                              "src": "39052:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1249,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1239,
                              "src": "39060:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1250,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1241,
                              "src": "39071:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1247,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1395,
                            "src": "39042:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39042:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1252,
                        "nodeType": "ExpressionStatement",
                        "src": "39042:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1254,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1237,
                              "src": "39097:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1255,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "39105:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39105:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1264,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1241,
                                  "src": "39157:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                  "id": 1265,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "39165:42:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  },
                                  "value": "ERC20: transfer amount exceeds allowance"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                    "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1257,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1094,
                                      "src": "39119:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 1259,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1258,
                                      "name": "sender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1237,
                                      "src": "39131:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "39119:19:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 1262,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 1260,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1064,
                                      "src": "39139:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                        "typeString": "function () view returns (address payable)"
                                      }
                                    },
                                    "id": 1261,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "39139:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "39119:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1263,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 756,
                                "src": "39119:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 1266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39119:89:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1253,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "39088:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39088:121:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1268,
                        "nodeType": "ExpressionStatement",
                        "src": "39088:121:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39226:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1246,
                        "id": 1270,
                        "nodeType": "Return",
                        "src": "39219:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1235,
                    "nodeType": "StructuredDocumentation",
                    "src": "38459:456:0",
                    "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                  },
                  "functionSelector": "23b872dd",
                  "id": 1272,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1243,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "39008:8:0"
                  },
                  "parameters": {
                    "id": 1242,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1237,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "38942:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1236,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38942:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1239,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "38958:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1238,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "38958:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1241,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "38977:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1240,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "38977:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "38941:51:0"
                  },
                  "returnParameters": {
                    "id": 1246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1245,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1272,
                        "src": "39026:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1244,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "39026:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39025:6:0"
                  },
                  "scope": 1574,
                  "src": "38920:317:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1299,
                    "nodeType": "Block",
                    "src": "39726:121:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1283,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "39745:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1284,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39745:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1285,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1275,
                              "src": "39759:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1293,
                                  "name": "addedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1277,
                                  "src": "39807:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1286,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1094,
                                      "src": "39768:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 1289,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 1287,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1064,
                                        "src": "39780:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 1288,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "39780:12:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "39768:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 1291,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1290,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1275,
                                    "src": "39794:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "39768:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1292,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 711,
                                "src": "39768:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 1294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39768:50:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1282,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "39736:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1295,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39736:83:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1296,
                        "nodeType": "ExpressionStatement",
                        "src": "39736:83:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "39836:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1281,
                        "id": 1298,
                        "nodeType": "Return",
                        "src": "39829:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1273,
                    "nodeType": "StructuredDocumentation",
                    "src": "39243:384:0",
                    "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                  },
                  "functionSelector": "39509351",
                  "id": 1300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1278,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1275,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1300,
                        "src": "39659:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1274,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "39659:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1277,
                        "mutability": "mutable",
                        "name": "addedValue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1300,
                        "src": "39676:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1276,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "39676:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39658:37:0"
                  },
                  "returnParameters": {
                    "id": 1281,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1280,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1300,
                        "src": "39720:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1279,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "39720:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "39719:6:0"
                  },
                  "scope": 1574,
                  "src": "39632:215:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1328,
                    "nodeType": "Block",
                    "src": "40433:167:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1311,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "40452:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 1312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "40452:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1313,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1303,
                              "src": "40466:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1321,
                                  "name": "subtractedValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1305,
                                  "src": "40514:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                  "id": 1322,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "40531:39:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  },
                                  "value": "ERC20: decreased allowance below zero"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                    "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1314,
                                      "name": "_allowances",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1094,
                                      "src": "40475:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                        "typeString": "mapping(address => mapping(address => uint256))"
                                      }
                                    },
                                    "id": 1317,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 1315,
                                        "name": "_msgSender",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1064,
                                        "src": "40487:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                          "typeString": "function () view returns (address payable)"
                                        }
                                      },
                                      "id": 1316,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "40487:12:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "40475:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                      "typeString": "mapping(address => uint256)"
                                    }
                                  },
                                  "id": 1319,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 1318,
                                    "name": "spender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1303,
                                    "src": "40501:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "40475:34:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1320,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 756,
                                "src": "40475:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                }
                              },
                              "id": 1323,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "40475:96:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1310,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1551,
                            "src": "40443:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "40443:129:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1325,
                        "nodeType": "ExpressionStatement",
                        "src": "40443:129:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 1326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "40589:4:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1309,
                        "id": 1327,
                        "nodeType": "Return",
                        "src": "40582:11:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1301,
                    "nodeType": "StructuredDocumentation",
                    "src": "39853:476:0",
                    "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                  },
                  "functionSelector": "a457c2d7",
                  "id": 1329,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1303,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1329,
                        "src": "40361:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1302,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "40361:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1305,
                        "mutability": "mutable",
                        "name": "subtractedValue",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1329,
                        "src": "40378:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "40378:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "40360:42:0"
                  },
                  "returnParameters": {
                    "id": 1309,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1308,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1329,
                        "src": "40427:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1307,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "40427:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "40426:6:0"
                  },
                  "scope": 1574,
                  "src": "40334:266:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1394,
                    "nodeType": "Block",
                    "src": "41161:443:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1340,
                                "name": "sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1332,
                                "src": "41179:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1343,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "41197:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1342,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "41189:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1341,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "41189:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1344,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "41189:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "41179:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                              "id": 1346,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "41201:39:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              },
                              "value": "ERC20: transfer from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                "typeString": "literal_string \"ERC20: transfer from the zero address\""
                              }
                            ],
                            "id": 1339,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "41171:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1347,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41171:70:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1348,
                        "nodeType": "ExpressionStatement",
                        "src": "41171:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1355,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1350,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1334,
                                "src": "41259:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1353,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "41280:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1352,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "41272:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1351,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "41272:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1354,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "41272:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "41259:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "id": 1356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "41284:37:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              },
                              "value": "ERC20: transfer to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                "typeString": "literal_string \"ERC20: transfer to the zero address\""
                              }
                            ],
                            "id": 1349,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "41251:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1357,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41251:71:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1358,
                        "nodeType": "ExpressionStatement",
                        "src": "41251:71:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1360,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "41354:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1361,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1334,
                              "src": "41362:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1362,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1336,
                              "src": "41373:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1359,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1573,
                            "src": "41333:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41333:47:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1364,
                        "nodeType": "ExpressionStatement",
                        "src": "41333:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1365,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "41391:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1367,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1366,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "41401:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "41391:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1372,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1336,
                                "src": "41433:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                "id": 1373,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "41441:40:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                },
                                "value": "ERC20: transfer amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                  "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1368,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "41411:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1370,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1369,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1332,
                                  "src": "41421:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "41411:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1371,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 756,
                              "src": "41411:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 1374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "41411:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "41391:91:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1376,
                        "nodeType": "ExpressionStatement",
                        "src": "41391:91:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1377,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "41492:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1379,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1378,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1334,
                              "src": "41502:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "41492:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1384,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1336,
                                "src": "41540:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1380,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "41515:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1382,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1381,
                                  "name": "recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1334,
                                  "src": "41525:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "41515:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "41515:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "41515:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "41492:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1387,
                        "nodeType": "ExpressionStatement",
                        "src": "41492:55:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1389,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "41571:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1390,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1334,
                              "src": "41579:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1391,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1336,
                              "src": "41590:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1388,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "41562:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41562:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1393,
                        "nodeType": "EmitStatement",
                        "src": "41557:40:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1330,
                    "nodeType": "StructuredDocumentation",
                    "src": "40606:463:0",
                    "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                  },
                  "id": 1395,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1337,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1332,
                        "mutability": "mutable",
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1395,
                        "src": "41093:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1331,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "41093:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1334,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1395,
                        "src": "41109:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "41109:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1336,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1395,
                        "src": "41128:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1335,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "41128:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "41092:51:0"
                  },
                  "returnParameters": {
                    "id": 1338,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "41161:0:0"
                  },
                  "scope": 1574,
                  "src": "41074:530:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1449,
                    "nodeType": "Block",
                    "src": "41940:305:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1409,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1404,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1398,
                                "src": "41958:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1407,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "41977:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1406,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "41969:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1405,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "41969:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1408,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "41969:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "41958:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                              "id": 1410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "41981:33:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              },
                              "value": "ERC20: mint to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                "typeString": "literal_string \"ERC20: mint to the zero address\""
                              }
                            ],
                            "id": 1403,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "41950:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "41950:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1412,
                        "nodeType": "ExpressionStatement",
                        "src": "41950:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42055:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42047:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1414,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42047:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1417,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42047:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1418,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1398,
                              "src": "42059:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1419,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1400,
                              "src": "42068:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1413,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1573,
                            "src": "42026:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42026:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1421,
                        "nodeType": "ExpressionStatement",
                        "src": "42026:49:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1427,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1422,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1096,
                            "src": "42086:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1425,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1400,
                                "src": "42118:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1423,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1096,
                                "src": "42101:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "42101:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42101:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42086:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1428,
                        "nodeType": "ExpressionStatement",
                        "src": "42086:39:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1429,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "42135:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1431,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1430,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1398,
                              "src": "42145:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "42135:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1436,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1400,
                                "src": "42179:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1432,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "42156:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1434,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1433,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1398,
                                  "src": "42166:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "42156:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "42156:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1437,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42156:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42135:51:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1439,
                        "nodeType": "ExpressionStatement",
                        "src": "42135:51:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42218:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1442,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42210:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1441,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42210:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1444,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42210:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1445,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1398,
                              "src": "42222:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1446,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1400,
                              "src": "42231:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1440,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "42201:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42201:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1448,
                        "nodeType": "EmitStatement",
                        "src": "42196:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1396,
                    "nodeType": "StructuredDocumentation",
                    "src": "41610:260:0",
                    "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address."
                  },
                  "id": 1450,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1401,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1398,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1450,
                        "src": "41890:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1397,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "41890:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1400,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1450,
                        "src": "41907:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1399,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "41907:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "41889:33:0"
                  },
                  "returnParameters": {
                    "id": 1402,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "41940:0:0"
                  },
                  "scope": 1574,
                  "src": "41875:370:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1505,
                    "nodeType": "Block",
                    "src": "42630:345:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1459,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1453,
                                "src": "42648:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1462,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "42667:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "42659:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1460,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "42659:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1463,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "42659:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "42648:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                              "id": 1465,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "42671:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              },
                              "value": "ERC20: burn from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                "typeString": "literal_string \"ERC20: burn from the zero address\""
                              }
                            ],
                            "id": 1458,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "42640:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42640:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1467,
                        "nodeType": "ExpressionStatement",
                        "src": "42640:67:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1469,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1453,
                              "src": "42739:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1472,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42756:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1471,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42748:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1470,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42748:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42748:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1474,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "42760:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1468,
                            "name": "_beforeTokenTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1573,
                            "src": "42718:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42718:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1476,
                        "nodeType": "ExpressionStatement",
                        "src": "42718:49:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1477,
                              "name": "_balances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1088,
                              "src": "42778:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1479,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1478,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1453,
                              "src": "42788:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "42778:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1484,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1455,
                                "src": "42822:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                "id": 1485,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "42830:36:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                },
                                "value": "ERC20: burn amount exceeds balance"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                  "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 1480,
                                  "name": "_balances",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1088,
                                  "src": "42799:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 1482,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 1481,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1453,
                                  "src": "42809:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "42799:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1483,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 756,
                              "src": "42799:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                              }
                            },
                            "id": 1486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42799:68:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42778:89:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1488,
                        "nodeType": "ExpressionStatement",
                        "src": "42778:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1494,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1489,
                            "name": "_totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1096,
                            "src": "42877:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1492,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1455,
                                "src": "42909:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1490,
                                "name": "_totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1096,
                                "src": "42892:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1491,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "42892:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1493,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42892:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "42877:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1495,
                        "nodeType": "ExpressionStatement",
                        "src": "42877:39:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1497,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1453,
                              "src": "42940:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "42957:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42949:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1498,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42949:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42949:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1502,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1455,
                              "src": "42961:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1496,
                            "name": "Transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 67,
                            "src": "42931:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42931:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1504,
                        "nodeType": "EmitStatement",
                        "src": "42926:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1451,
                    "nodeType": "StructuredDocumentation",
                    "src": "42251:309:0",
                    "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                  },
                  "id": 1506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1456,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1453,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1506,
                        "src": "42580:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1452,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "42580:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1455,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1506,
                        "src": "42597:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1454,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "42597:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "42579:33:0"
                  },
                  "returnParameters": {
                    "id": 1457,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "42630:0:0"
                  },
                  "scope": 1574,
                  "src": "42565:410:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1550,
                    "nodeType": "Block",
                    "src": "43481:257:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1517,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1509,
                                "src": "43499:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1520,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "43516:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1519,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "43508:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1518,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "43508:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1521,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43508:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "43499:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                              "id": 1523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "43520:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              },
                              "value": "ERC20: approve from the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                "typeString": "literal_string \"ERC20: approve from the zero address\""
                              }
                            ],
                            "id": 1516,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "43491:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43491:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1525,
                        "nodeType": "ExpressionStatement",
                        "src": "43491:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 1532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1527,
                                "name": "spender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1511,
                                "src": "43577:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 1530,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "43596:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 1529,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "43588:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 1528,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "43588:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 1531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43588:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "43577:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                              "id": 1533,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "43600:36:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              },
                              "value": "ERC20: approve to the zero address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                "typeString": "literal_string \"ERC20: approve to the zero address\""
                              }
                            ],
                            "id": 1526,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "43569:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43569:68:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1535,
                        "nodeType": "ExpressionStatement",
                        "src": "43569:68:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1536,
                                "name": "_allowances",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1094,
                                "src": "43648:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 1539,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1537,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1509,
                                "src": "43660:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "43648:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1540,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1538,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1511,
                              "src": "43667:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "43648:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1541,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1513,
                            "src": "43678:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "43648:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1543,
                        "nodeType": "ExpressionStatement",
                        "src": "43648:36:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1545,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1509,
                              "src": "43708:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1546,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1511,
                              "src": "43715:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1547,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1513,
                              "src": "43724:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1544,
                            "name": "Approval",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 76,
                            "src": "43699:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43699:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1549,
                        "nodeType": "EmitStatement",
                        "src": "43694:37:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1507,
                    "nodeType": "StructuredDocumentation",
                    "src": "42981:412:0",
                    "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                  },
                  "id": 1551,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_approve",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1509,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1551,
                        "src": "43416:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1508,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "43416:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1511,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1551,
                        "src": "43431:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1510,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "43431:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1513,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1551,
                        "src": "43448:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1512,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "43448:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "43415:48:0"
                  },
                  "returnParameters": {
                    "id": 1515,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "43481:0:0"
                  },
                  "scope": 1574,
                  "src": "43398:340:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1561,
                    "nodeType": "Block",
                    "src": "44111:38:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1557,
                            "name": "_decimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "44121:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1558,
                            "name": "decimals_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1554,
                            "src": "44133:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "44121:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "id": 1560,
                        "nodeType": "ExpressionStatement",
                        "src": "44121:21:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1552,
                    "nodeType": "StructuredDocumentation",
                    "src": "43744:312:0",
                    "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."
                  },
                  "id": 1562,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setupDecimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1555,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1554,
                        "mutability": "mutable",
                        "name": "decimals_",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1562,
                        "src": "44085:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1553,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "44085:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44084:17:0"
                  },
                  "returnParameters": {
                    "id": 1556,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "44111:0:0"
                  },
                  "scope": 1574,
                  "src": "44061:88:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1572,
                    "nodeType": "Block",
                    "src": "44825:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1563,
                    "nodeType": "StructuredDocumentation",
                    "src": "44155:576:0",
                    "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                  },
                  "id": 1573,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_beforeTokenTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1570,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1565,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1573,
                        "src": "44766:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1564,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44766:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1567,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1573,
                        "src": "44780:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1566,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "44780:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1569,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1573,
                        "src": "44792:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1568,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "44792:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "44765:42:0"
                  },
                  "returnParameters": {
                    "id": 1571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "44825:0:0"
                  },
                  "scope": 1574,
                  "src": "44736:92:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "35404:9426:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1576,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "45609:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 1577,
                  "nodeType": "InheritanceSpecifier",
                  "src": "45609:9:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1578,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1574,
                    "src": "45620:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$1574",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 1579,
                  "nodeType": "InheritanceSpecifier",
                  "src": "45620:5:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 1575,
                "nodeType": "StructuredDocumentation",
                "src": "45485:94:0",
                "text": "@title BasicFDT implements the basic level FDT functionality for accounting for revenues."
              },
              "fullyImplemented": true,
              "id": 1946,
              "linearizedBaseContracts": [
                1946,
                1574,
                141,
                77,
                1076
              ],
              "name": "BasicFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 1582,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1580,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "45639:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45633:33:0",
                  "typeName": {
                    "id": 1581,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45658:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1585,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1583,
                    "name": "SafeMathUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 684,
                    "src": "45677:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathUint_$684",
                      "typeString": "library SafeMathUint"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45671:33:0",
                  "typeName": {
                    "id": 1584,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45696:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 1588,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1586,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1055,
                    "src": "45715:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$1055",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45709:33:0",
                  "typeName": {
                    "id": 1587,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45735:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 1591,
                  "libraryName": {
                    "contractScope": null,
                    "id": 1589,
                    "name": "SafeMathInt",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 661,
                    "src": "45753:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathInt_$661",
                      "typeString": "library SafeMathInt"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "45747:33:0",
                  "typeName": {
                    "id": 1590,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45773:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 1596,
                  "mutability": "constant",
                  "name": "pointsMultiplier",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45786:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1592,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45786:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                    },
                    "id": 1595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 1593,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "45831:1:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "313238",
                      "id": 1594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "45836:3:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "128"
                    },
                    "src": "45831:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1598,
                  "mutability": "mutable",
                  "name": "pointsPerShare",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45845:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1597,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45845:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1602,
                  "mutability": "mutable",
                  "name": "pointsCorrection",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45883:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                    "typeString": "mapping(address => int256)"
                  },
                  "typeName": {
                    "id": 1601,
                    "keyType": {
                      "id": 1599,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "45891:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "45883:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                      "typeString": "mapping(address => int256)"
                    },
                    "valueType": {
                      "id": 1600,
                      "name": "int256",
                      "nodeType": "ElementaryTypeName",
                      "src": "45902:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1606,
                  "mutability": "mutable",
                  "name": "withdrawnFunds",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1946,
                  "src": "45942:51:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 1605,
                    "keyType": {
                      "id": 1603,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "45950:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "45942:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 1604,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "45961:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1617,
                    "nodeType": "Block",
                    "src": "46081:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 1618,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1613,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1608,
                          "src": "46060:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1614,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1610,
                          "src": "46066:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 1615,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 1612,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1574,
                        "src": "46054:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$1574_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "46054:19:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1611,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1608,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1618,
                        "src": "46012:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1607,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "46012:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1610,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1618,
                        "src": "46032:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1609,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "46032:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46011:42:0"
                  },
                  "returnParameters": {
                    "id": 1616,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "46081:0:0"
                  },
                  "scope": 1946,
                  "src": "46000:84:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1660,
                    "nodeType": "Block",
                    "src": "47016:288:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1625,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1160,
                                  "src": "47034:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 1626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "47034:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "47050:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "47034:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4644543a5a45524f5f535550504c59",
                              "id": 1629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "47053:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              },
                              "value": "FDT:ZERO_SUPPLY"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              }
                            ],
                            "id": 1624,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "47026:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47026:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1631,
                        "nodeType": "ExpressionStatement",
                        "src": "47026:45:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1632,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1621,
                            "src": "47086:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1633,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "47095:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "47086:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1636,
                        "nodeType": "IfStatement",
                        "src": "47082:23:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1623,
                          "id": 1635,
                          "nodeType": "Return",
                          "src": "47098:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1637,
                            "name": "pointsPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1598,
                            "src": "47115:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1646,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1642,
                                      "name": "pointsMultiplier",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1596,
                                      "src": "47161:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1640,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1621,
                                      "src": "47151:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1641,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 791,
                                    "src": "47151:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1643,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "47151:27:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 1644,
                                    "name": "totalSupply",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1160,
                                    "src": "47181:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view returns (uint256)"
                                    }
                                  },
                                  "id": 1645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "47181:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "47151:43:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1638,
                                "name": "pointsPerShare",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1598,
                                "src": "47132:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1639,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "47132:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "47132:63:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "47115:80:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1649,
                        "nodeType": "ExpressionStatement",
                        "src": "47115:80:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1651,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "47227:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47227:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1653,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1621,
                              "src": "47239:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1650,
                            "name": "FundsDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 87,
                            "src": "47210:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47210:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1655,
                        "nodeType": "EmitStatement",
                        "src": "47205:40:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1657,
                              "name": "pointsPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1598,
                              "src": "47282:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1656,
                            "name": "PointsPerShareUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 101,
                            "src": "47260:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47260:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1659,
                        "nodeType": "EmitStatement",
                        "src": "47255:42:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1619,
                    "nodeType": "StructuredDocumentation",
                    "src": "46090:871:0",
                    "text": "@dev Distributes funds to token holders.\n@dev It reverts if the total supply of tokens is 0.\n@dev It emits a `FundsDistributed` event if the amount of received funds is greater than 0.\n@dev It emits a `PointsPerShareUpdated` event if the amount of received funds is greater than 0.\nAbout undistributed funds:\nIn each distribution, there is a small amount of funds which do not get distributed,\nwhich is `(value  pointsMultiplier) % totalSupply()`.\nWith a well-chosen `pointsMultiplier`, the amount funds that are not getting distributed\nin a distribution can be less than 1 (base unit).\nWe can actually keep track of the undistributed funds in a distribution\nand try to distribute it in the next distribution."
                  },
                  "id": 1661,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1622,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1621,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1661,
                        "src": "46992:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1620,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "46992:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "46991:15:0"
                  },
                  "returnParameters": {
                    "id": 1623,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47016:0:0"
                  },
                  "scope": 1946,
                  "src": "46966:338:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1698,
                    "nodeType": "Block",
                    "src": "47643:303:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1667,
                            "name": "withdrawableDividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1665,
                            "src": "47653:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1669,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "47702:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "47702:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "id": 1668,
                              "name": "withdrawableFundsOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1717,
                              "src": "47682:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 1671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "47682:31:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "47653:60:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1673,
                        "nodeType": "ExpressionStatement",
                        "src": "47653:60:0"
                      },
                      {
                        "assignments": [
                          1675
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1675,
                            "mutability": "mutable",
                            "name": "_withdrawnFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1698,
                            "src": "47723:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1674,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "47723:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1683,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1681,
                              "name": "withdrawableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1665,
                              "src": "47783:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1676,
                                "name": "withdrawnFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1606,
                                "src": "47752:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1679,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1677,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "47767:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 1678,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "47767:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "47752:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "47752:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47752:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "47723:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1684,
                              "name": "withdrawnFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1606,
                              "src": "47814:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 1687,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1685,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "47829:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1686,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47829:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "47814:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1688,
                            "name": "_withdrawnFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1675,
                            "src": "47843:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "47814:44:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1690,
                        "nodeType": "ExpressionStatement",
                        "src": "47814:44:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1692,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "47889:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1693,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "47889:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1694,
                              "name": "withdrawableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1665,
                              "src": "47901:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1695,
                              "name": "_withdrawnFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1675,
                              "src": "47923:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1691,
                            "name": "FundsWithdrawn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 96,
                            "src": "47874:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 1696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "47874:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1697,
                        "nodeType": "EmitStatement",
                        "src": "47869:70:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1662,
                    "nodeType": "StructuredDocumentation",
                    "src": "47310:252:0",
                    "text": "@dev    Prepares the withdrawal of funds.\n@dev    It emits a `FundsWithdrawn` event if the amount of withdrawn funds is greater than 0.\n@return withdrawableDividend The amount of dividend funds that can be withdrawn."
                  },
                  "id": 1699,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_prepareWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1663,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "47592:2:0"
                  },
                  "returnParameters": {
                    "id": 1666,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1665,
                        "mutability": "mutable",
                        "name": "withdrawableDividend",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1699,
                        "src": "47613:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1664,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "47613:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47612:30:0"
                  },
                  "scope": 1946,
                  "src": "47567:379:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    116
                  ],
                  "body": {
                    "id": 1716,
                    "nodeType": "Block",
                    "src": "48036:79:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1711,
                                "name": "withdrawnFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1606,
                                "src": "48085:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 1713,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1712,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1701,
                                "src": "48100:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "48085:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1708,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1701,
                                  "src": "48073:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1707,
                                "name": "accumulativeFundsOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1757,
                                "src": "48053:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 1709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "48053:27:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1710,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "48053:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "48053:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1706,
                        "id": 1715,
                        "nodeType": "Return",
                        "src": "48046:62:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "443bb293",
                  "id": 1717,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawableFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1703,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "48009:8:0"
                  },
                  "parameters": {
                    "id": 1702,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1701,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1717,
                        "src": "47981:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1700,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "47981:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "47980:16:0"
                  },
                  "returnParameters": {
                    "id": 1706,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1705,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1717,
                        "src": "48027:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1704,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48027:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48026:9:0"
                  },
                  "scope": 1946,
                  "src": "47952:163:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    128
                  ],
                  "body": {
                    "id": 1729,
                    "nodeType": "Block",
                    "src": "48204:46:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1725,
                            "name": "withdrawnFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1606,
                            "src": "48221:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1727,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1726,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1719,
                            "src": "48236:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "48221:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1724,
                        "id": 1728,
                        "nodeType": "Return",
                        "src": "48214:29:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "0041c52c",
                  "id": 1730,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawnFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1721,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "48172:8:0"
                  },
                  "parameters": {
                    "id": 1720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1719,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1730,
                        "src": "48147:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1718,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "48147:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48146:16:0"
                  },
                  "returnParameters": {
                    "id": 1724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1723,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1730,
                        "src": "48195:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1722,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48195:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48194:9:0"
                  },
                  "scope": 1946,
                  "src": "48121:129:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    136
                  ],
                  "body": {
                    "id": 1756,
                    "nodeType": "Block",
                    "src": "48340:221:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1747,
                                      "name": "pointsCorrection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1602,
                                      "src": "48477:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                        "typeString": "mapping(address => int256)"
                                      }
                                    },
                                    "id": 1749,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1748,
                                      "name": "_owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1732,
                                      "src": "48494:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "48477:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 1741,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1732,
                                                "src": "48415:6:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 1740,
                                              "name": "balanceOf",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1174,
                                              "src": "48405:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view returns (uint256)"
                                              }
                                            },
                                            "id": 1742,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "48405:17:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1738,
                                            "name": "pointsPerShare",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1598,
                                            "src": "48369:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 1739,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 791,
                                          "src": "48369:35:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 1743,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "48369:54:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1744,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toInt256Safe",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 683,
                                      "src": "48369:84:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 1745,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "48369:86:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 1746,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1054,
                                  "src": "48369:107:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                    "typeString": "function (int256,int256) pure returns (int256)"
                                  }
                                },
                                "id": 1750,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "48369:133:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 1751,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint256Safe",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 660,
                              "src": "48369:164:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                "typeString": "function (int256) pure returns (uint256)"
                              }
                            },
                            "id": 1752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "48369:166:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1753,
                            "name": "pointsMultiplier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1596,
                            "src": "48538:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "48369:185:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1737,
                        "id": 1755,
                        "nodeType": "Return",
                        "src": "48350:204:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4e97415f",
                  "id": 1757,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeFundsOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1734,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "48308:8:0"
                  },
                  "parameters": {
                    "id": 1733,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1732,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1757,
                        "src": "48285:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "48285:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48284:16:0"
                  },
                  "returnParameters": {
                    "id": 1737,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1736,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1757,
                        "src": "48331:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1735,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "48331:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48330:9:0"
                  },
                  "scope": 1946,
                  "src": "48256:305:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1395
                  ],
                  "body": {
                    "id": 1825,
                    "nodeType": "Block",
                    "src": "49068:541:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1771,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "49094:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1772,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1762,
                              "src": "49100:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1773,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1764,
                              "src": "49104:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1768,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "49078:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1946",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1395,
                            "src": "49078:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 1774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49078:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1775,
                        "nodeType": "ExpressionStatement",
                        "src": "49078:32:0"
                      },
                      {
                        "assignments": [
                          1777
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1777,
                            "mutability": "mutable",
                            "name": "_magCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1825,
                            "src": "49121:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1776,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49121:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1784,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1780,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1764,
                                  "src": "49170:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1778,
                                  "name": "pointsPerShare",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1598,
                                  "src": "49151:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "49151:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 1781,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "49151:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toInt256Safe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 683,
                            "src": "49151:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (int256)"
                            }
                          },
                          "id": 1783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49151:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49121:70:0"
                      },
                      {
                        "assignments": [
                          1786
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1786,
                            "mutability": "mutable",
                            "name": "pointsCorrectionFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1825,
                            "src": "49201:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1785,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49201:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1793,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1791,
                              "name": "_magCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1777,
                              "src": "49258:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1787,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "49231:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1789,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1788,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1760,
                                "src": "49248:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "49231:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "49231:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49231:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49201:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1794,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "49283:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1796,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1795,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "49300:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "49283:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1797,
                            "name": "pointsCorrectionFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1786,
                            "src": "49313:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "49283:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1799,
                        "nodeType": "ExpressionStatement",
                        "src": "49283:50:0"
                      },
                      {
                        "assignments": [
                          1801
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1801,
                            "mutability": "mutable",
                            "name": "pointsCorrectionTo",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1825,
                            "src": "49343:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1800,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49343:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1808,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1806,
                              "name": "_magCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1777,
                              "src": "49398:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1802,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "49373:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1804,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1803,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1762,
                                "src": "49390:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "49373:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1805,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "49373:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49373:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49343:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1813,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1809,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "49423:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1811,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1810,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1762,
                              "src": "49440:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "49423:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1812,
                            "name": "pointsCorrectionTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1801,
                            "src": "49453:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "49423:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1814,
                        "nodeType": "ExpressionStatement",
                        "src": "49423:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1816,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "49511:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1817,
                              "name": "pointsCorrectionFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1786,
                              "src": "49517:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1815,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "49487:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49487:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1819,
                        "nodeType": "EmitStatement",
                        "src": "49482:56:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1821,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1762,
                              "src": "49577:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1822,
                              "name": "pointsCorrectionTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1801,
                              "src": "49583:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1820,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "49553:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49553:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1824,
                        "nodeType": "EmitStatement",
                        "src": "49548:54:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1758,
                    "nodeType": "StructuredDocumentation",
                    "src": "48567:380:0",
                    "text": "@dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n@dev   It emits two `PointsCorrectionUpdated` events, one for the sender and one for the receiver.\n@param from  The address to transfer from.\n@param to    The address to transfer to.\n@param value The amount to be transferred."
                  },
                  "id": 1826,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1766,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "49059:8:0"
                  },
                  "parameters": {
                    "id": 1765,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1760,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1826,
                        "src": "48980:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1759,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "48980:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1762,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1826,
                        "src": "49002:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1761,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "49002:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1764,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1826,
                        "src": "49022:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1763,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "49022:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "48970:71:0"
                  },
                  "returnParameters": {
                    "id": 1767,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "49068:0:0"
                  },
                  "scope": 1946,
                  "src": "48952:657:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1450
                  ],
                  "body": {
                    "id": 1868,
                    "nodeType": "Block",
                    "src": "49926:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1838,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1829,
                              "src": "49948:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1839,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1831,
                              "src": "49957:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1835,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "49936:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1946",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1837,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1450,
                            "src": "49936:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1840,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49936:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1841,
                        "nodeType": "ExpressionStatement",
                        "src": "49936:27:0"
                      },
                      {
                        "assignments": [
                          1843
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1843,
                            "mutability": "mutable",
                            "name": "_pointsCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1868,
                            "src": "49974:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1842,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "49974:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1856,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1850,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1831,
                                          "src": "50064:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1848,
                                          "name": "pointsPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1598,
                                          "src": "50045:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1849,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "50045:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1851,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "50045:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1852,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "50044:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "50044:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1854,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "50044:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1844,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "50001:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1846,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1845,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1829,
                                "src": "50018:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "50001:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1847,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "50001:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1855,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50001:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49974:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1857,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "50107:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1859,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1858,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1829,
                              "src": "50124:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "50107:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1860,
                            "name": "_pointsCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1843,
                            "src": "50135:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "50107:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1862,
                        "nodeType": "ExpressionStatement",
                        "src": "50107:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1864,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1829,
                              "src": "50192:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1865,
                              "name": "_pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1843,
                              "src": "50201:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1863,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "50168:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1866,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50168:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1867,
                        "nodeType": "EmitStatement",
                        "src": "50163:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1827,
                    "nodeType": "StructuredDocumentation",
                    "src": "49615:233:0",
                    "text": "@dev   Mints tokens to an account. Updates pointsCorrection to keep funds unchanged.\n@param account The account that will receive the created tokens.\n@param value   The amount that will be created."
                  },
                  "id": 1869,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1833,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "49917:8:0"
                  },
                  "parameters": {
                    "id": 1832,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1829,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1869,
                        "src": "49868:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1828,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "49868:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1831,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1869,
                        "src": "49885:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1830,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "49885:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "49867:32:0"
                  },
                  "returnParameters": {
                    "id": 1834,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "49926:0:0"
                  },
                  "scope": 1946,
                  "src": "49853:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1506
                  ],
                  "body": {
                    "id": 1911,
                    "nodeType": "Block",
                    "src": "50611:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1881,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1872,
                              "src": "50633:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1882,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1874,
                              "src": "50642:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1878,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "50621:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_BasicFDT_$1946",
                                "typeString": "contract super BasicFDT"
                              }
                            },
                            "id": 1880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1506,
                            "src": "50621:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 1883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50621:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1884,
                        "nodeType": "ExpressionStatement",
                        "src": "50621:27:0"
                      },
                      {
                        "assignments": [
                          1886
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1886,
                            "mutability": "mutable",
                            "name": "_pointsCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1911,
                            "src": "50659:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1885,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "50659:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1899,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1893,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1874,
                                          "src": "50749:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1891,
                                          "name": "pointsPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1598,
                                          "src": "50730:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1892,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "50730:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1894,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "50730:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1895,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "50729:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1896,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "50729:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 1897,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "50729:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1887,
                                "name": "pointsCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1602,
                                "src": "50686:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 1889,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1888,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1872,
                                "src": "50703:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "50686:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 1890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "50686:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 1898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50686:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "50659:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1900,
                              "name": "pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1602,
                              "src": "50792:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 1902,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1901,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1872,
                              "src": "50809:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "50792:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 1903,
                            "name": "_pointsCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1886,
                            "src": "50820:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "50792:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 1905,
                        "nodeType": "ExpressionStatement",
                        "src": "50792:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1907,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1872,
                              "src": "50877:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1908,
                              "name": "_pointsCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1886,
                              "src": "50886:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 1906,
                            "name": "PointsCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 108,
                            "src": "50853:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 1909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50853:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1910,
                        "nodeType": "EmitStatement",
                        "src": "50848:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1870,
                    "nodeType": "StructuredDocumentation",
                    "src": "50232:301:0",
                    "text": "@dev   Burns an amount of the token of a given account. Updates pointsCorrection to keep funds unchanged.\n@dev   It emits a `PointsCorrectionUpdated` event.\n@param account The account whose tokens will be burnt.\n@param value   The amount that will be burnt."
                  },
                  "id": 1912,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1876,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "50602:8:0"
                  },
                  "parameters": {
                    "id": 1875,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1872,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1912,
                        "src": "50553:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1871,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "50553:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1874,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1912,
                        "src": "50570:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1873,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "50570:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "50552:32:0"
                  },
                  "returnParameters": {
                    "id": 1877,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "50611:0:0"
                  },
                  "scope": 1946,
                  "src": "50538:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": {
                    "id": 1916,
                    "nodeType": "Block",
                    "src": "50966:2:0",
                    "statements": []
                  },
                  "documentation": null,
                  "functionSelector": "24600fc3",
                  "id": 1917,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1914,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "50957:8:0"
                  },
                  "parameters": {
                    "id": 1913,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "50939:2:0"
                  },
                  "returnParameters": {
                    "id": 1915,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "50966:0:0"
                  },
                  "scope": 1946,
                  "src": "50917:51:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1923,
                    "nodeType": "Block",
                    "src": "51289:2:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 1918,
                    "nodeType": "StructuredDocumentation",
                    "src": "50974:240:0",
                    "text": "@dev    Updates the current `fundsToken` balance and returns the difference of the new and previous `fundsToken` balance.\n@return A int256 representing the difference of the new and previous `fundsToken` balance."
                  },
                  "id": 1924,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateFundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1919,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "51252:2:0"
                  },
                  "returnParameters": {
                    "id": 1922,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1921,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1924,
                        "src": "51281:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1920,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "51281:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "51280:8:0"
                  },
                  "scope": 1946,
                  "src": "51219:72:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    140
                  ],
                  "body": {
                    "id": 1944,
                    "nodeType": "Block",
                    "src": "51352:150:0",
                    "statements": [
                      {
                        "assignments": [
                          1929
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1929,
                            "mutability": "mutable",
                            "name": "newFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1944,
                            "src": "51362:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 1928,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "51362:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1932,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1930,
                            "name": "_updateFundsTokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1924,
                            "src": "51380:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 1931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51380:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "51362:44:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 1935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1933,
                            "name": "newFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1929,
                            "src": "51421:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1934,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "51433:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "51421:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1937,
                        "nodeType": "IfStatement",
                        "src": "51417:26:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 1927,
                          "id": 1936,
                          "nodeType": "Return",
                          "src": "51436:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1939,
                                  "name": "newFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1929,
                                  "src": "51470:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 1940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 660,
                                "src": "51470:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256) pure returns (uint256)"
                                }
                              },
                              "id": 1941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "51470:24:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1938,
                            "name": "_distributeFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1661,
                            "src": "51453:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 1942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "51453:42:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1943,
                        "nodeType": "ExpressionStatement",
                        "src": "51453:42:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "46c162de",
                  "id": 1945,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateFundsReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1926,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "51335:8:0"
                  },
                  "parameters": {
                    "id": 1925,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "51325:2:0"
                  },
                  "returnParameters": {
                    "id": 1927,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "51352:0:0"
                  },
                  "scope": 1946,
                  "src": "51297:205:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 7772,
              "src": "45579:5926:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 1948,
                    "name": "IBasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 141,
                    "src": "51777:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IBasicFDT_$141",
                      "typeString": "contract IBasicFDT"
                    }
                  },
                  "id": 1949,
                  "nodeType": "InheritanceSpecifier",
                  "src": "51777:9:0"
                }
              ],
              "contractDependencies": [
                77,
                141
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 1947,
                "nodeType": "StructuredDocumentation",
                "src": "51668:83:0",
                "text": "@title ExtendedFDT implements the FDT functionality for accounting for losses."
              },
              "fullyImplemented": false,
              "id": 2006,
              "linearizedBaseContracts": [
                2006,
                141,
                77
              ],
              "name": "IExtendedFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1950,
                    "nodeType": "StructuredDocumentation",
                    "src": "51794:179:0",
                    "text": "@dev This event emits when the internal `lossesPerShare` is updated.\n@dev First, and only, parameter is the new value of the internal `lossesPerShare`."
                  },
                  "id": 1954,
                  "name": "LossesPerShareUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1953,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1952,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1954,
                        "src": "52006:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1951,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52006:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52005:9:0"
                  },
                  "src": "51978:37:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1955,
                    "nodeType": "StructuredDocumentation",
                    "src": "52021:235:0",
                    "text": "@dev This event emits when an account's `lossesCorrection` is updated.\n@dev First parameter is the address of some account.\n@dev Second parameter is the new value of the account's `lossesCorrection`."
                  },
                  "id": 1961,
                  "name": "LossesCorrectionUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1957,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1961,
                        "src": "52291:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52291:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1959,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1961,
                        "src": "52308:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 1958,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52308:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52290:25:0"
                  },
                  "src": "52261:55:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1962,
                    "nodeType": "StructuredDocumentation",
                    "src": "52322:243:0",
                    "text": "@dev This event emits when new losses are distributed.\n@dev First parameter is the address of the account that has distributed losses.\n@dev Second parameter is the amount of losses received for distribution."
                  },
                  "id": 1968,
                  "name": "LossesDistributed",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1964,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1968,
                        "src": "52594:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1963,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52594:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1966,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1968,
                        "src": "52611:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1965,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52611:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52593:26:0"
                  },
                  "src": "52570:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 1969,
                    "nodeType": "StructuredDocumentation",
                    "src": "52626:328:0",
                    "text": "@dev   This event emits when distributed losses are recognized by a token holder.\n@dev First parameter is the address of the receiver of losses.\n@dev Second parameter is the amount of losses that were recognized.\n@dev Third parameter is the total amount of losses that are recognized."
                  },
                  "id": 1977,
                  "name": "LossesRecognized",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 1976,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1971,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1977,
                        "src": "52982:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1970,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "52982:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1973,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1977,
                        "src": "52999:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1972,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "52999:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1975,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1977,
                        "src": "53008:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1974,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53008:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "52981:35:0"
                  },
                  "src": "52959:58:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1978,
                    "nodeType": "StructuredDocumentation",
                    "src": "53023:205:0",
                    "text": "@dev    Returns the amount of losses that an account can withdraw.\n@param  _owner The address of a token holder.\n@return The amount of losses that `_owner` can withdraw."
                  },
                  "functionSelector": "66967791",
                  "id": 1985,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizableLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1981,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1980,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1985,
                        "src": "53263:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1979,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "53263:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53262:16:0"
                  },
                  "returnParameters": {
                    "id": 1984,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1983,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1985,
                        "src": "53302:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1982,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53302:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53301:9:0"
                  },
                  "scope": 2006,
                  "src": "53233:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1986,
                    "nodeType": "StructuredDocumentation",
                    "src": "53317:209:0",
                    "text": "@dev    Returns the amount of losses that an account has recognized.\n@param  _owner The address of a token holder.\n@return The amount of losses that `_owner` has recognized."
                  },
                  "functionSelector": "aed4966a",
                  "id": 1993,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizedLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1989,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1988,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1993,
                        "src": "53559:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1987,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "53559:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53558:16:0"
                  },
                  "returnParameters": {
                    "id": 1992,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1991,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1993,
                        "src": "53598:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1990,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "53598:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "53597:9:0"
                  },
                  "scope": 2006,
                  "src": "53531:76:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 1994,
                    "nodeType": "StructuredDocumentation",
                    "src": "53613:428:0",
                    "text": "@dev    Returns the amount of losses that an account has earned in total. \n@dev    accumulativeLossesOf(_owner) = recognizableLossesOf(_owner) + recognizedLossesOf(_owner) \n= (lossesPerShare * balanceOf(_owner) + lossesCorrection[_owner]) / pointsMultiplier \n@param  _owner The address of a token holder.\n@return The amount of losses that `_owner` has earned in total."
                  },
                  "functionSelector": "40bde098",
                  "id": 2001,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 1997,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1996,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2001,
                        "src": "54076:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1995,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "54076:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "54075:16:0"
                  },
                  "returnParameters": {
                    "id": 2000,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1999,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2001,
                        "src": "54115:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1998,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "54115:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "54114:9:0"
                  },
                  "scope": 2006,
                  "src": "54046:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2002,
                    "nodeType": "StructuredDocumentation",
                    "src": "54130:354:0",
                    "text": "@dev Registers a loss. \n@dev May be called directly after a shortfall after BPT burning occurs. \n@dev Calls _updateLossesTokenBalance(), whereby the contract computes the delta of the new and previous \nlosses balance and increments the total losses (cumulative), by delta, by calling _distributeLosses(). "
                  },
                  "functionSelector": "cc0fef02",
                  "id": 2005,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLossesReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2003,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "54518:2:0"
                  },
                  "returnParameters": {
                    "id": 2004,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "54529:0:0"
                  },
                  "scope": 2006,
                  "src": "54489:41:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "51751:2782:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2008,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2006,
                    "src": "54920:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$2006",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 2009,
                  "nodeType": "InheritanceSpecifier",
                  "src": "54920:12:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2010,
                    "name": "BasicFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1946,
                    "src": "54934:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BasicFDT_$1946",
                      "typeString": "contract BasicFDT"
                    }
                  },
                  "id": 2011,
                  "nodeType": "InheritanceSpecifier",
                  "src": "54934:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574,
                1946,
                2006
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 2007,
                "nodeType": "StructuredDocumentation",
                "src": "54804:83:0",
                "text": "@title ExtendedFDT implements the FDT functionality for accounting for losses."
              },
              "fullyImplemented": true,
              "id": 2379,
              "linearizedBaseContracts": [
                2379,
                1946,
                1574,
                2006,
                141,
                77,
                1076
              ],
              "name": "ExtendedFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 2014,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2012,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "54956:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "54950:33:0",
                  "typeName": {
                    "id": 2013,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "54975:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 2017,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2015,
                    "name": "SafeMathUint",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 684,
                    "src": "54994:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathUint_$684",
                      "typeString": "library SafeMathUint"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "54988:33:0",
                  "typeName": {
                    "id": 2016,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55013:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 2020,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2018,
                    "name": "SignedSafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1055,
                    "src": "55032:14:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SignedSafeMath_$1055",
                      "typeString": "library SignedSafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "55026:33:0",
                  "typeName": {
                    "id": 2019,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55052:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "id": 2023,
                  "libraryName": {
                    "contractScope": null,
                    "id": 2021,
                    "name": "SafeMathInt",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 661,
                    "src": "55070:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMathInt_$661",
                      "typeString": "library SafeMathInt"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "55064:33:0",
                  "typeName": {
                    "id": 2022,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55090:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 2025,
                  "mutability": "mutable",
                  "name": "lossesPerShare",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2379,
                  "src": "55103:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2024,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "55103:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2029,
                  "mutability": "mutable",
                  "name": "lossesCorrection",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2379,
                  "src": "55141:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                    "typeString": "mapping(address => int256)"
                  },
                  "typeName": {
                    "id": 2028,
                    "keyType": {
                      "id": 2026,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "55149:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "55141:26:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                      "typeString": "mapping(address => int256)"
                    },
                    "valueType": {
                      "id": 2027,
                      "name": "int256",
                      "nodeType": "ElementaryTypeName",
                      "src": "55160:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2033,
                  "mutability": "mutable",
                  "name": "recognizedLosses",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2379,
                  "src": "55200:53:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 2032,
                    "keyType": {
                      "id": 2030,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "55208:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "55200:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 2031,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "55219:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2044,
                    "nodeType": "Block",
                    "src": "55344:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 2045,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2040,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2035,
                          "src": "55323:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 2041,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2037,
                          "src": "55329:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 2042,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 2039,
                        "name": "BasicFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "55314:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BasicFDT_$1946_$",
                          "typeString": "type(contract BasicFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "55314:22:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2035,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2045,
                        "src": "55272:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2034,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "55272:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2037,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2045,
                        "src": "55292:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2036,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "55292:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "55271:42:0"
                  },
                  "returnParameters": {
                    "id": 2043,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "55344:0:0"
                  },
                  "scope": 2379,
                  "src": "55260:87:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2091,
                    "nodeType": "Block",
                    "src": "56274:351:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2052,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1160,
                                  "src": "56292:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 2053,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "56292:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2054,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "56308:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "56292:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4644543a5a45524f5f535550504c59",
                              "id": 2056,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "56311:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              },
                              "value": "FDT:ZERO_SUPPLY"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a3114e332720ee805fc81c31b02342a611c667fffb8818a1e551e83759812e71",
                                "typeString": "literal_string \"FDT:ZERO_SUPPLY\""
                              }
                            ],
                            "id": 2051,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "56284:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 2057,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56284:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2058,
                        "nodeType": "ExpressionStatement",
                        "src": "56284:45:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2059,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2048,
                            "src": "56344:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "56353:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "56344:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2063,
                        "nodeType": "IfStatement",
                        "src": "56340:23:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 2050,
                          "id": 2062,
                          "nodeType": "Return",
                          "src": "56356:7:0"
                        }
                      },
                      {
                        "assignments": [
                          2065
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2065,
                            "mutability": "mutable",
                            "name": "_lossesPerShare",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2091,
                            "src": "56373:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2064,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "56373:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2076,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2070,
                                    "name": "pointsMultiplier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1596,
                                    "src": "56428:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 2068,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2048,
                                    "src": "56418:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2069,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 791,
                                  "src": "56418:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 2071,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "56418:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2072,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1160,
                                  "src": "56448:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 2073,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "56448:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "56418:43:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2066,
                              "name": "lossesPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2025,
                              "src": "56399:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2067,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "56399:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56399:63:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "56373:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2077,
                            "name": "lossesPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2025,
                            "src": "56472:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2078,
                            "name": "_lossesPerShare",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2065,
                            "src": "56498:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "56472:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2080,
                        "nodeType": "ExpressionStatement",
                        "src": "56472:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2082,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "56547:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "56547:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2084,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2048,
                              "src": "56559:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2081,
                            "name": "LossesDistributed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1968,
                            "src": "56529:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56529:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2086,
                        "nodeType": "EmitStatement",
                        "src": "56524:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2088,
                              "name": "_lossesPerShare",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2065,
                              "src": "56602:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2087,
                            "name": "LossesPerShareUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1954,
                            "src": "56580:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 2089,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "56580:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2090,
                        "nodeType": "EmitStatement",
                        "src": "56575:43:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2046,
                    "nodeType": "StructuredDocumentation",
                    "src": "55353:865:0",
                    "text": "@dev Distributes losses to token holders.\n@dev It reverts if the total supply of tokens is 0.\n@dev It emits a `LossesDistributed` event if the amount of received losses is greater than 0.\n@dev It emits a `LossesPerShareUpdated` event if the amount of received losses is greater than 0.\nAbout undistributed losses:\nIn each distribution, there is a small amount of losses which do not get distributed,\nwhich is `(value * pointsMultiplier) % totalSupply()`.\nWith a well-chosen `pointsMultiplier`, the amount losses that are not getting distributed\nin a distribution can be less than 1 (base unit).\nWe can actually keep track of the undistributed losses in a distribution\nand try to distribute it in the next distribution."
                  },
                  "id": 2092,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_distributeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2049,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2048,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2092,
                        "src": "56250:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2047,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "56250:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "56249:15:0"
                  },
                  "returnParameters": {
                    "id": 2050,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "56274:0:0"
                  },
                  "scope": 2379,
                  "src": "56223:402:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2129,
                    "nodeType": "Block",
                    "src": "56974:311:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 2098,
                            "name": "recognizableDividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2096,
                            "src": "56984:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2100,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "57028:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2101,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "57028:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              ],
                              "id": 2099,
                              "name": "recognizableLossesOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2148,
                              "src": "57007:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 2102,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "57007:32:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "56984:55:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2104,
                        "nodeType": "ExpressionStatement",
                        "src": "56984:55:0"
                      },
                      {
                        "assignments": [
                          2106
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2106,
                            "mutability": "mutable",
                            "name": "_recognizedLosses",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2129,
                            "src": "57050:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2105,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "57050:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2114,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2112,
                              "name": "recognizableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2096,
                              "src": "57114:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2107,
                                "name": "recognizedLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2033,
                                "src": "57081:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2110,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2108,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "57098:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 2109,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "57098:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "57081:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2111,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "57081:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57081:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "57050:85:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2115,
                              "name": "recognizedLosses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2033,
                              "src": "57145:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 2118,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2116,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "57162:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2117,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57162:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "57145:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2119,
                            "name": "_recognizedLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2106,
                            "src": "57176:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "57145:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2121,
                        "nodeType": "ExpressionStatement",
                        "src": "57145:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2123,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "57226:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "57226:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2125,
                              "name": "recognizableDividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2096,
                              "src": "57238:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2126,
                              "name": "_recognizedLosses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2106,
                              "src": "57260:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2122,
                            "name": "LossesRecognized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1977,
                            "src": "57209:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 2127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57209:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2128,
                        "nodeType": "EmitStatement",
                        "src": "57204:74:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2093,
                    "nodeType": "StructuredDocumentation",
                    "src": "56631:256:0",
                    "text": "@dev    Prepares losses for a withdrawal.\n@dev    It emits a `LossesWithdrawn` event if the amount of withdrawn losses is greater than 0.\n@return recognizableDividend The amount of dividend losses that can be recognized."
                  },
                  "id": 2130,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_prepareLossesWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2094,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "56923:2:0"
                  },
                  "returnParameters": {
                    "id": 2097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2096,
                        "mutability": "mutable",
                        "name": "recognizableDividend",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2130,
                        "src": "56944:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2095,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "56944:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "56943:30:0"
                  },
                  "scope": 2379,
                  "src": "56892:393:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1985
                  ],
                  "body": {
                    "id": 2147,
                    "nodeType": "Block",
                    "src": "57376:82:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2142,
                                "name": "recognizedLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2033,
                                "src": "57426:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 2144,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2143,
                                "name": "_owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2132,
                                "src": "57443:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "57426:24:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2139,
                                  "name": "_owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2132,
                                  "src": "57414:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2138,
                                "name": "accumulativeLossesOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2188,
                                "src": "57393:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 2140,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "57393:28:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "57393:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 2145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "57393:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2137,
                        "id": 2146,
                        "nodeType": "Return",
                        "src": "57386:65:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "66967791",
                  "id": 2148,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizableLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2134,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "57344:8:0"
                  },
                  "parameters": {
                    "id": 2133,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2132,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2148,
                        "src": "57321:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2131,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57321:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57320:16:0"
                  },
                  "returnParameters": {
                    "id": 2137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2136,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2148,
                        "src": "57367:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2135,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "57367:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57366:9:0"
                  },
                  "scope": 2379,
                  "src": "57291:167:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1993
                  ],
                  "body": {
                    "id": 2160,
                    "nodeType": "Block",
                    "src": "57549:48:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 2156,
                            "name": "recognizedLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2033,
                            "src": "57566:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 2158,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 2157,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2150,
                            "src": "57583:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "57566:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2155,
                        "id": 2159,
                        "nodeType": "Return",
                        "src": "57559:31:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "aed4966a",
                  "id": 2161,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "recognizedLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2152,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "57517:8:0"
                  },
                  "parameters": {
                    "id": 2151,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2150,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2161,
                        "src": "57492:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2149,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57492:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57491:16:0"
                  },
                  "returnParameters": {
                    "id": 2155,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2154,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2161,
                        "src": "57540:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2153,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "57540:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57539:9:0"
                  },
                  "scope": 2379,
                  "src": "57464:133:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2001
                  ],
                  "body": {
                    "id": 2187,
                    "nodeType": "Block",
                    "src": "57688:221:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2185,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 2178,
                                      "name": "lossesCorrection",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2029,
                                      "src": "57825:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                        "typeString": "mapping(address => int256)"
                                      }
                                    },
                                    "id": 2180,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 2179,
                                      "name": "_owner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2163,
                                      "src": "57842:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "57825:24:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "id": 2172,
                                                "name": "_owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2163,
                                                "src": "57763:6:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "id": 2171,
                                              "name": "balanceOf",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1174,
                                              "src": "57753:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view returns (uint256)"
                                              }
                                            },
                                            "id": 2173,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "57753:17:0",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 2169,
                                            "name": "lossesPerShare",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2025,
                                            "src": "57717:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 2170,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 791,
                                          "src": "57717:35:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 2174,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "57717:54:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 2175,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "toInt256Safe",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 683,
                                      "src": "57717:84:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (int256)"
                                      }
                                    },
                                    "id": 2176,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "57717:86:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "id": 2177,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1054,
                                  "src": "57717:107:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                                    "typeString": "function (int256,int256) pure returns (int256)"
                                  }
                                },
                                "id": 2181,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "57717:133:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "id": 2182,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toUint256Safe",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 660,
                              "src": "57717:164:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                "typeString": "function (int256) pure returns (uint256)"
                              }
                            },
                            "id": 2183,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "57717:166:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2184,
                            "name": "pointsMultiplier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1596,
                            "src": "57886:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "57717:185:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2168,
                        "id": 2186,
                        "nodeType": "Return",
                        "src": "57698:204:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "40bde098",
                  "id": 2188,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "accumulativeLossesOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2165,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "57656:8:0"
                  },
                  "parameters": {
                    "id": 2164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2163,
                        "mutability": "mutable",
                        "name": "_owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2188,
                        "src": "57633:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2162,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "57633:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57632:16:0"
                  },
                  "returnParameters": {
                    "id": 2168,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2167,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2188,
                        "src": "57679:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "57679:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "57678:9:0"
                  },
                  "scope": 2379,
                  "src": "57603:306:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1826
                  ],
                  "body": {
                    "id": 2256,
                    "nodeType": "Block",
                    "src": "58422:547:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2202,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2191,
                              "src": "58448:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2203,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2193,
                              "src": "58454:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2204,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2195,
                              "src": "58458:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2199,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "58432:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$2379",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 2201,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1826,
                            "src": "58432:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 2205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58432:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2206,
                        "nodeType": "ExpressionStatement",
                        "src": "58432:32:0"
                      },
                      {
                        "assignments": [
                          2208
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2208,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2256,
                            "src": "58475:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2207,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "58475:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2215,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2211,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2195,
                                  "src": "58524:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2209,
                                  "name": "lossesPerShare",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2025,
                                  "src": "58505:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2210,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "58505:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2212,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "58505:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 2213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "toInt256Safe",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 683,
                            "src": "58505:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (int256)"
                            }
                          },
                          "id": 2214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58505:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "58475:70:0"
                      },
                      {
                        "assignments": [
                          2217
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2217,
                            "mutability": "mutable",
                            "name": "lossesCorrectionFrom",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2256,
                            "src": "58555:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2216,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "58555:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2224,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2222,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2208,
                              "src": "58612:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2218,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "58585:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2220,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2219,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2191,
                                "src": "58602:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "58585:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "58585:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58585:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "58555:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2225,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "58640:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2227,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2226,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2191,
                              "src": "58657:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "58640:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2228,
                            "name": "lossesCorrectionFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2217,
                            "src": "58670:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "58640:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2230,
                        "nodeType": "ExpressionStatement",
                        "src": "58640:50:0"
                      },
                      {
                        "assignments": [
                          2232
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2232,
                            "mutability": "mutable",
                            "name": "lossesCorrectionTo",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2256,
                            "src": "58700:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2231,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "58700:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2239,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2237,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2208,
                              "src": "58755:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2233,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "58730:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2235,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2234,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2193,
                                "src": "58747:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "58730:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "58730:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58730:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "58700:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2240,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "58783:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2242,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2241,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2193,
                              "src": "58800:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "58783:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2243,
                            "name": "lossesCorrectionTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2232,
                            "src": "58813:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "58783:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2245,
                        "nodeType": "ExpressionStatement",
                        "src": "58783:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2247,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2191,
                              "src": "58871:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2248,
                              "name": "lossesCorrectionFrom",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2217,
                              "src": "58877:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2246,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "58847:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2249,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58847:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2250,
                        "nodeType": "EmitStatement",
                        "src": "58842:56:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2252,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2193,
                              "src": "58937:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2253,
                              "name": "lossesCorrectionTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2232,
                              "src": "58943:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2251,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "58913:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "58913:49:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2255,
                        "nodeType": "EmitStatement",
                        "src": "58908:54:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2189,
                    "nodeType": "StructuredDocumentation",
                    "src": "57915:386:0",
                    "text": "@dev   Transfers tokens from one account to another. Updates pointsCorrection to keep funds unchanged.\n@dev         It emits two `LossesCorrectionUpdated` events, one for the sender and one for the receiver.\n@param from  The address to transfer from.\n@param to    The address to transfer to.\n@param value The amount to be transferred."
                  },
                  "id": 2257,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2197,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "58413:8:0"
                  },
                  "parameters": {
                    "id": 2196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2191,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2257,
                        "src": "58334:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2190,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "58334:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2193,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2257,
                        "src": "58356:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "58356:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2195,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2257,
                        "src": "58376:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2194,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "58376:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "58324:71:0"
                  },
                  "returnParameters": {
                    "id": 2198,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "58422:0:0"
                  },
                  "scope": 2379,
                  "src": "58306:663:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1869
                  ],
                  "body": {
                    "id": 2299,
                    "nodeType": "Block",
                    "src": "59346:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2269,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2260,
                              "src": "59368:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2270,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2262,
                              "src": "59377:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2266,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "59356:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$2379",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 2268,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1869,
                            "src": "59356:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59356:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2272,
                        "nodeType": "ExpressionStatement",
                        "src": "59356:27:0"
                      },
                      {
                        "assignments": [
                          2274
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2274,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2299,
                            "src": "59394:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2273,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "59394:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2287,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 2281,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2262,
                                          "src": "59484:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2279,
                                          "name": "lossesPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2025,
                                          "src": "59465:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2280,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "59465:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2282,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "59465:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2283,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "59464:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2284,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "59464:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 2285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "59464:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2275,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "59421:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2277,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2276,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2260,
                                "src": "59438:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "59421:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "59421:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59421:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "59394:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2288,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "59527:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2290,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2289,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2260,
                              "src": "59544:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "59527:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2291,
                            "name": "_lossesCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2274,
                            "src": "59555:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "59527:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2293,
                        "nodeType": "ExpressionStatement",
                        "src": "59527:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2295,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2260,
                              "src": "59612:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2296,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2274,
                              "src": "59621:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2294,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "59588:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "59588:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2298,
                        "nodeType": "EmitStatement",
                        "src": "59583:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2258,
                    "nodeType": "StructuredDocumentation",
                    "src": "58975:293:0",
                    "text": "@dev   Mints tokens to an account. Updates lossesCorrection to keep losses unchanged.\n@dev   It emits a `LossesCorrectionUpdated` event.\n@param account The account that will receive the created tokens.\n@param value   The amount that will be created."
                  },
                  "id": 2300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2264,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "59337:8:0"
                  },
                  "parameters": {
                    "id": 2263,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2260,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2300,
                        "src": "59288:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2259,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "59288:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2262,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2300,
                        "src": "59305:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2261,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "59305:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59287:32:0"
                  },
                  "returnParameters": {
                    "id": 2265,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "59346:0:0"
                  },
                  "scope": 2379,
                  "src": "59273:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1912
                  ],
                  "body": {
                    "id": 2342,
                    "nodeType": "Block",
                    "src": "60037:300:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2312,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2303,
                              "src": "60059:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2313,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2305,
                              "src": "60068:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2309,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "60047:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_ExtendedFDT_$2379",
                                "typeString": "contract super ExtendedFDT"
                              }
                            },
                            "id": 2311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_burn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1912,
                            "src": "60047:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 2314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60047:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2315,
                        "nodeType": "ExpressionStatement",
                        "src": "60047:27:0"
                      },
                      {
                        "assignments": [
                          2317
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2317,
                            "mutability": "mutable",
                            "name": "_lossesCorrection",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2342,
                            "src": "60085:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2316,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "60085:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2330,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 2324,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2305,
                                          "src": "60175:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 2322,
                                          "name": "lossesPerShare",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2025,
                                          "src": "60156:14:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2323,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "mul",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 791,
                                        "src": "60156:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2325,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "60156:25:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 2326,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "60155:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2327,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toInt256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 683,
                                "src": "60155:40:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_int256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (int256)"
                                }
                              },
                              "id": 2328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "60155:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2318,
                                "name": "lossesCorrection",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2029,
                                "src": "60112:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                  "typeString": "mapping(address => int256)"
                                }
                              },
                              "id": 2320,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 2319,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2303,
                                "src": "60129:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "60112:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 2321,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1054,
                            "src": "60112:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 2329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60112:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "60085:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 2335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 2331,
                              "name": "lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2029,
                              "src": "60218:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_int256_$",
                                "typeString": "mapping(address => int256)"
                              }
                            },
                            "id": 2333,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 2332,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2303,
                              "src": "60235:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "60218:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 2334,
                            "name": "_lossesCorrection",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2317,
                            "src": "60246:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "60218:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 2336,
                        "nodeType": "ExpressionStatement",
                        "src": "60218:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2338,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2303,
                              "src": "60303:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2339,
                              "name": "_lossesCorrection",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2317,
                              "src": "60312:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 2337,
                            "name": "LossesCorrectionUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1961,
                            "src": "60279:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_int256_$returns$__$",
                              "typeString": "function (address,int256)"
                            }
                          },
                          "id": 2340,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60279:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2341,
                        "nodeType": "EmitStatement",
                        "src": "60274:56:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2301,
                    "nodeType": "StructuredDocumentation",
                    "src": "59652:307:0",
                    "text": "@dev   Burns an amount of the token of a given account. Updates lossesCorrection to keep losses unchanged.\n@dev   It emits a `LossesCorrectionUpdated` event.\n@param account The account from which tokens will be burnt.\n@param value   The amount that will be burnt."
                  },
                  "id": 2343,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2307,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "60028:8:0"
                  },
                  "parameters": {
                    "id": 2306,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2303,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2343,
                        "src": "59979:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2302,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "59979:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2305,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2343,
                        "src": "59996:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2304,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "59996:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "59978:32:0"
                  },
                  "returnParameters": {
                    "id": 2308,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60037:0:0"
                  },
                  "scope": 2379,
                  "src": "59964:373:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2005
                  ],
                  "body": {
                    "id": 2363,
                    "nodeType": "Block",
                    "src": "60399:150:0",
                    "statements": [
                      {
                        "assignments": [
                          2348
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2348,
                            "mutability": "mutable",
                            "name": "newLosses",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 2363,
                            "src": "60409:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 2347,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "60409:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 2351,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2349,
                            "name": "_updateLossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2378,
                            "src": "60428:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 2350,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60428:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "60409:41:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 2354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2352,
                            "name": "newLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2348,
                            "src": "60465:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 2353,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "60478:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "60465:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2356,
                        "nodeType": "IfStatement",
                        "src": "60461:27:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 2346,
                          "id": 2355,
                          "nodeType": "Return",
                          "src": "60481:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 2358,
                                  "name": "newLosses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2348,
                                  "src": "60516:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 2359,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "toUint256Safe",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 660,
                                "src": "60516:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$",
                                  "typeString": "function (int256) pure returns (uint256)"
                                }
                              },
                              "id": 2360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "60516:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2357,
                            "name": "_distributeLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2092,
                            "src": "60498:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 2361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "60498:44:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2362,
                        "nodeType": "ExpressionStatement",
                        "src": "60498:44:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "cc0fef02",
                  "id": 2364,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLossesReceived",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2345,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "60382:8:0"
                  },
                  "parameters": {
                    "id": 2344,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60372:2:0"
                  },
                  "returnParameters": {
                    "id": 2346,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60399:0:0"
                  },
                  "scope": 2379,
                  "src": "60343:206:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2370,
                    "nodeType": "Block",
                    "src": "60727:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 2365,
                    "nodeType": "StructuredDocumentation",
                    "src": "60555:97:0",
                    "text": "@dev Recognizes all recognizable losses for an account using loss accounting."
                  },
                  "id": 2371,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_recognizeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2366,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60682:2:0"
                  },
                  "returnParameters": {
                    "id": 2369,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2368,
                        "mutability": "mutable",
                        "name": "losses",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2371,
                        "src": "60711:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "60711:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "60710:16:0"
                  },
                  "scope": 2379,
                  "src": "60657:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2377,
                    "nodeType": "Block",
                    "src": "61029:3:0",
                    "statements": []
                  },
                  "documentation": {
                    "id": 2372,
                    "nodeType": "StructuredDocumentation",
                    "src": "60736:222:0",
                    "text": "@dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n@return A int256 representing the difference of the new and previous losses balance."
                  },
                  "id": 2378,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateLossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2373,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "60992:2:0"
                  },
                  "returnParameters": {
                    "id": 2376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2375,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2378,
                        "src": "61021:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 2374,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "61021:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "61020:8:0"
                  },
                  "scope": 2379,
                  "src": "60963:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "54887:6148:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2380,
                "nodeType": "StructuredDocumentation",
                "src": "61130:104:0",
                "text": "@title MapleGlobals maintains a central source of parameters and allowlists for the Maple protocol."
              },
              "fullyImplemented": false,
              "id": 2870,
              "linearizedBaseContracts": [
                2870
              ],
              "name": "IMapleGlobals",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2381,
                    "nodeType": "StructuredDocumentation",
                    "src": "61265:91:0",
                    "text": "@dev   Emits an event indicating the MapleGlobals contract was created."
                  },
                  "id": 2383,
                  "name": "Initialized",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "61378:2:0"
                  },
                  "src": "61361:20:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2384,
                    "nodeType": "StructuredDocumentation",
                    "src": "61387:336:0",
                    "text": "@dev   Emits an event indicating the validity of a Collateral Asset was set.\n@param asset    The Collateral Asset to assign validity to.\n@param decimals The number of decimal places of `asset`.\n@param symbol   The symbol of `asset`.\n@param valid    The new validity status of `asset`."
                  },
                  "id": 2394,
                  "name": "CollateralAssetSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2393,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2386,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61753:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2385,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "61753:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2388,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61768:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2387,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "61768:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2390,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61786:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2389,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "61786:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2392,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2394,
                        "src": "61801:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2391,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "61801:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "61752:60:0"
                  },
                  "src": "61728:85:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2395,
                    "nodeType": "StructuredDocumentation",
                    "src": "61819:334:0",
                    "text": "@dev   Emits an event indicating the validity of a Liquidity Asset was set.\n@param asset    The Liquidity Asset to assign validity to.\n@param decimals The number of decimal places of `asset`.\n@param symbol   The symbol of `asset`.\n@param valid    The new validity status of `asset`."
                  },
                  "id": 2405,
                  "name": "LiquidityAssetSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2404,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2397,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62182:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2396,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62182:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2399,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "decimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62197:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2398,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "62197:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2401,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62215:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2400,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "62215:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2403,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2405,
                        "src": "62230:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2402,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "62230:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62181:60:0"
                  },
                  "src": "62158:84:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2406,
                    "nodeType": "StructuredDocumentation",
                    "src": "62248:183:0",
                    "text": "@dev   Emits an event indicating the Oracle for an asset was set.\n@param asset  The asset to update price for.\n@param oracle The new Oracle to use."
                  },
                  "id": 2412,
                  "name": "OracleSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2408,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2412,
                        "src": "62452:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2407,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62452:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2410,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oracle",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2412,
                        "src": "62467:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2409,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62467:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62451:31:0"
                  },
                  "src": "62436:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2413,
                    "nodeType": "StructuredDocumentation",
                    "src": "62489:40:0",
                    "text": "@dev This is unused."
                  },
                  "id": 2419,
                  "name": "TransferRestrictionExemptionSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2415,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "exemptedContract",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2419,
                        "src": "62572:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2414,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62572:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2417,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2419,
                        "src": "62606:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2416,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "62606:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62571:46:0"
                  },
                  "src": "62534:84:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2420,
                    "nodeType": "StructuredDocumentation",
                    "src": "62624:232:0",
                    "text": "@dev   Emits an event indicating the validity of a Balancer Pool was set.\n@param balancerPool The address of Balancer Pool contract.\n@param valid        The new validity status of a Balancer Pool."
                  },
                  "id": 2426,
                  "name": "BalancerPoolSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2425,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2422,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2426,
                        "src": "62883:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2421,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "62883:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2424,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2426,
                        "src": "62905:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2423,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "62905:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "62882:34:0"
                  },
                  "src": "62861:56:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2427,
                    "nodeType": "StructuredDocumentation",
                    "src": "62923:151:0",
                    "text": "@dev   Emits an event indicating a PendingGovernor was set.\n@param pendingGovernor The address of the new Pending Governor."
                  },
                  "id": 2431,
                  "name": "PendingGovernorSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2429,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pendingGovernor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2431,
                        "src": "63104:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2428,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "63104:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63103:33:0"
                  },
                  "src": "63079:58:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2432,
                    "nodeType": "StructuredDocumentation",
                    "src": "63143:164:0",
                    "text": "@dev   Emits an event indicating Governorship was accepted by a new account.\n@param governor The account that has accepted Governorship."
                  },
                  "id": 2436,
                  "name": "GovernorAccepted",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2435,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2434,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "governor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2436,
                        "src": "63335:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2433,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "63335:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63334:26:0"
                  },
                  "src": "63312:49:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2437,
                    "nodeType": "StructuredDocumentation",
                    "src": "63367:225:0",
                    "text": "@dev   Emits an event indicating that some Governor controlled parameter was set.\n@param which The identifier of the parameter that was set.\n@param value The value the parameter was set to."
                  },
                  "id": 2443,
                  "name": "GlobalsParamSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2442,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2439,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "which",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2443,
                        "src": "63619:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2438,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "63619:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2441,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2443,
                        "src": "63642:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2440,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "63642:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63618:38:0"
                  },
                  "src": "63597:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2444,
                    "nodeType": "StructuredDocumentation",
                    "src": "63663:211:0",
                    "text": "@dev   Emits an event indicating that some Governor controlled address was set.\n@param which The identifier of the address that was set.\n@param addr  The address that was set."
                  },
                  "id": 2450,
                  "name": "GlobalsAddressSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2449,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2446,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "which",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "63903:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2445,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "63903:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2448,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "addr",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2450,
                        "src": "63926:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2447,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "63926:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "63902:37:0"
                  },
                  "src": "63879:61:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2451,
                    "nodeType": "StructuredDocumentation",
                    "src": "63946:148:0",
                    "text": "@dev   Emits an event indicating the protocol's paused state has been set.\n@param pause Whether the protocol was paused."
                  },
                  "id": 2455,
                  "name": "ProtocolPaused",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2454,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2453,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "pause",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2455,
                        "src": "64120:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2452,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "64120:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64119:12:0"
                  },
                  "src": "64099:33:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2456,
                    "nodeType": "StructuredDocumentation",
                    "src": "64138:143:0",
                    "text": "@dev   Emits an event indicating the GlobalAdmin was set.\n@param newGlobalAdmin The address of the new GlobalAdmin."
                  },
                  "id": 2460,
                  "name": "GlobalAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2458,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newGlobalAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2460,
                        "src": "64307:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2457,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64307:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64306:32:0"
                  },
                  "src": "64286:53:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2461,
                    "nodeType": "StructuredDocumentation",
                    "src": "64345:230:0",
                    "text": "@dev   Emits an event indicating the validity of a Pool Delegate was set.\n@param poolDelegate The address of a Pool Delegate.\n@param valid        Whether `poolDelegate` is a valid Pool Delegate."
                  },
                  "id": 2467,
                  "name": "PoolDelegateSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2463,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2467,
                        "src": "64602:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2462,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64602:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2465,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2467,
                        "src": "64632:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2464,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "64632:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64601:42:0"
                  },
                  "src": "64580:64:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2468,
                    "nodeType": "StructuredDocumentation",
                    "src": "64650:73:0",
                    "text": "@dev The ERC-2222 Maple Token for the Maple protocol."
                  },
                  "functionSelector": "a0530946",
                  "id": 2473,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mpl",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "64740:2:0"
                  },
                  "returnParameters": {
                    "id": 2472,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2471,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2473,
                        "src": "64766:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2470,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64766:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64765:9:0"
                  },
                  "scope": 2870,
                  "src": "64728:47:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2474,
                    "nodeType": "StructuredDocumentation",
                    "src": "64781:142:0",
                    "text": "@dev The Governor that is declared for governorship transfer. \n@dev Must be accepted for transfer to take effect. "
                  },
                  "functionSelector": "e3056a34",
                  "id": 2479,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pendingGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2475,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "64952:2:0"
                  },
                  "returnParameters": {
                    "id": 2478,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2477,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2479,
                        "src": "64978:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2476,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "64978:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "64977:9:0"
                  },
                  "scope": 2870,
                  "src": "64928:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2480,
                    "nodeType": "StructuredDocumentation",
                    "src": "64993:91:0",
                    "text": "@dev The Governor responsible for management of global Maple variables."
                  },
                  "functionSelector": "0c340a24",
                  "id": 2485,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "governor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2481,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65106:2:0"
                  },
                  "returnParameters": {
                    "id": 2484,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2483,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2485,
                        "src": "65132:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2482,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65132:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65131:9:0"
                  },
                  "scope": 2870,
                  "src": "65089:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2486,
                    "nodeType": "StructuredDocumentation",
                    "src": "65147:125:0",
                    "text": "@dev The MapleTreasury is the Treasury where all fees pass through for conversion, prior to distribution."
                  },
                  "functionSelector": "a5a27605",
                  "id": 2491,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mapleTreasury",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2487,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65299:2:0"
                  },
                  "returnParameters": {
                    "id": 2490,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2489,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2491,
                        "src": "65325:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2488,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65325:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65324:9:0"
                  },
                  "scope": 2870,
                  "src": "65277:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2492,
                    "nodeType": "StructuredDocumentation",
                    "src": "65340:147:0",
                    "text": "@dev The Global Admin of the whole network. \n@dev Has the power to switch off/on the functionality of entire protocol. "
                  },
                  "functionSelector": "ec9a9368",
                  "id": 2497,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globalAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2493,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65512:2:0"
                  },
                  "returnParameters": {
                    "id": 2496,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2495,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2497,
                        "src": "65538:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2494,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "65538:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65537:9:0"
                  },
                  "scope": 2870,
                  "src": "65492:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2498,
                    "nodeType": "StructuredDocumentation",
                    "src": "65553:119:0",
                    "text": "@dev The amount of time a Borrower has to make a missed payment before a default can be triggered. "
                  },
                  "functionSelector": "705d5f24",
                  "id": 2503,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2499,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65704:2:0"
                  },
                  "returnParameters": {
                    "id": 2502,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2501,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2503,
                        "src": "65730:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2500,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65730:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65729:9:0"
                  },
                  "scope": 2870,
                  "src": "65677:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2504,
                    "nodeType": "StructuredDocumentation",
                    "src": "65745:126:0",
                    "text": "@dev The minimum amount of Pool cover that a Pool Delegate has to provide before they can finalize a Pool."
                  },
                  "functionSelector": "3106374c",
                  "id": 2509,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "swapOutRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2505,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "65900:2:0"
                  },
                  "returnParameters": {
                    "id": 2508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2507,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2509,
                        "src": "65926:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "65926:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "65925:9:0"
                  },
                  "scope": 2870,
                  "src": "65876:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2510,
                    "nodeType": "StructuredDocumentation",
                    "src": "65941:116:0",
                    "text": "@dev The amount of time to allow a Borrower to drawdown on their Loan after funding period ends."
                  },
                  "functionSelector": "74d7c62b",
                  "id": 2515,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2511,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66084:2:0"
                  },
                  "returnParameters": {
                    "id": 2514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2513,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2515,
                        "src": "66110:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2512,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66110:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66109:9:0"
                  },
                  "scope": 2870,
                  "src": "66062:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2516,
                    "nodeType": "StructuredDocumentation",
                    "src": "66125:104:0",
                    "text": "@dev The portion of drawdown that goes to the Pool Delegates and individual Lenders."
                  },
                  "functionSelector": "16a12d7a",
                  "id": 2521,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "investorFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2517,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66254:2:0"
                  },
                  "returnParameters": {
                    "id": 2520,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2519,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2521,
                        "src": "66280:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2518,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66280:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66279:9:0"
                  },
                  "scope": 2870,
                  "src": "66234:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2522,
                    "nodeType": "StructuredDocumentation",
                    "src": "66295:80:0",
                    "text": "@dev The portion of drawdown that goes to the MapleTreasury."
                  },
                  "functionSelector": "cc32d176",
                  "id": 2527,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "treasuryFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2523,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66400:2:0"
                  },
                  "returnParameters": {
                    "id": 2526,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2525,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2527,
                        "src": "66426:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2524,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66426:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66425:9:0"
                  },
                  "scope": 2870,
                  "src": "66380:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2528,
                    "nodeType": "StructuredDocumentation",
                    "src": "66441:81:0",
                    "text": "@dev The maximum amount of slippage for Uniswap transactions."
                  },
                  "functionSelector": "55323195",
                  "id": 2533,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "maxSwapSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2529,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66551:2:0"
                  },
                  "returnParameters": {
                    "id": 2532,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2531,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2533,
                        "src": "66577:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2530,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66577:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66576:9:0"
                  },
                  "scope": 2870,
                  "src": "66527:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2534,
                    "nodeType": "StructuredDocumentation",
                    "src": "66592:130:0",
                    "text": "@dev The minimum amount of LoanFDTs required to trigger liquidations (basis points percentage of totalSupply)."
                  },
                  "functionSelector": "4a2697c4",
                  "id": 2539,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "minLoanEquity",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2535,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66749:2:0"
                  },
                  "returnParameters": {
                    "id": 2538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2537,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2539,
                        "src": "66775:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2536,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66775:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66774:9:0"
                  },
                  "scope": 2870,
                  "src": "66727:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2540,
                    "nodeType": "StructuredDocumentation",
                    "src": "66790:119:0",
                    "text": "@dev The period (in secs) after which Stakers are allowed to unstake their BPTs from a StakeLocker."
                  },
                  "functionSelector": "a965d6b5",
                  "id": 2545,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakerCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2541,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "66943:2:0"
                  },
                  "returnParameters": {
                    "id": 2544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2543,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2545,
                        "src": "66969:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2542,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "66969:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "66968:9:0"
                  },
                  "scope": 2870,
                  "src": "66914:64:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2546,
                    "nodeType": "StructuredDocumentation",
                    "src": "66984:110:0",
                    "text": "@dev The period (in secs) after which LPs are allowed to withdraw their funds from a Pool."
                  },
                  "functionSelector": "dd02e0ec",
                  "id": 2551,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lpCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2547,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67124:2:0"
                  },
                  "returnParameters": {
                    "id": 2550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2549,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2551,
                        "src": "67150:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67150:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67149:9:0"
                  },
                  "scope": 2870,
                  "src": "67099:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2552,
                    "nodeType": "StructuredDocumentation",
                    "src": "67165:161:0",
                    "text": "@dev The window of time (in secs) after `stakerCooldownPeriod` that an account has to withdraw before their intent to unstake is invalidated."
                  },
                  "functionSelector": "2018b870",
                  "id": 2557,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakerUnstakeWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2553,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67359:2:0"
                  },
                  "returnParameters": {
                    "id": 2556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2555,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2557,
                        "src": "67385:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67385:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67384:9:0"
                  },
                  "scope": 2870,
                  "src": "67331:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2558,
                    "nodeType": "StructuredDocumentation",
                    "src": "67400:158:0",
                    "text": "@dev The window of time (in secs) after `lpCooldownPeriod` that an account has to withdraw before their intent to withdraw is invalidated."
                  },
                  "functionSelector": "df3d02bd",
                  "id": 2563,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lpWithdrawWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2559,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67588:2:0"
                  },
                  "returnParameters": {
                    "id": 2562,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2561,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2563,
                        "src": "67614:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2560,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "67614:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67613:9:0"
                  },
                  "scope": 2870,
                  "src": "67563:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2564,
                    "nodeType": "StructuredDocumentation",
                    "src": "67629:84:0",
                    "text": "@dev Whether the functionality of the entire protocol is paused."
                  },
                  "functionSelector": "425fad58",
                  "id": 2569,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "protocolPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2565,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "67741:2:0"
                  },
                  "returnParameters": {
                    "id": 2568,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2567,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2569,
                        "src": "67767:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2566,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "67767:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67766:6:0"
                  },
                  "scope": 2870,
                  "src": "67718:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2570,
                    "nodeType": "StructuredDocumentation",
                    "src": "67779:127:0",
                    "text": "@param  liquidityAsset The address of a Liquidity Asset.\n@return Whether `liquidityAsset` is valid."
                  },
                  "functionSelector": "8695118a",
                  "id": 2577,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2573,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2572,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2577,
                        "src": "67942:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2571,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "67942:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67941:24:0"
                  },
                  "returnParameters": {
                    "id": 2576,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2575,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2577,
                        "src": "67989:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2574,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "67989:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "67988:6:0"
                  },
                  "scope": 2870,
                  "src": "67911:84:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2578,
                    "nodeType": "StructuredDocumentation",
                    "src": "68001:130:0",
                    "text": "@param  collateralAsset The address of a Collateral Asset.\n@return Whether `collateralAsset` is valid."
                  },
                  "functionSelector": "8c14834b",
                  "id": 2585,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidCollateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2580,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2585,
                        "src": "68168:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2579,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68168:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68167:25:0"
                  },
                  "returnParameters": {
                    "id": 2584,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2583,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2585,
                        "src": "68216:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2582,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68216:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68215:6:0"
                  },
                  "scope": 2870,
                  "src": "68136:86:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2586,
                    "nodeType": "StructuredDocumentation",
                    "src": "68228:102:0",
                    "text": "@param  calc The address of a Calculator.\n@return Whether `calc` is valid."
                  },
                  "functionSelector": "1beb84e7",
                  "id": 2593,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validCalcs",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2589,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2588,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2593,
                        "src": "68355:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2587,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68355:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68354:14:0"
                  },
                  "returnParameters": {
                    "id": 2592,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2591,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2593,
                        "src": "68392:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2590,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68392:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68391:6:0"
                  },
                  "scope": 2870,
                  "src": "68335:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2594,
                    "nodeType": "StructuredDocumentation",
                    "src": "68404:198:0",
                    "text": "@dev    Prevents unauthorized/unknown addresses from creating Pools.\n@param  poolDelegate The address of a Pool Delegate.\n@return Whether `poolDelegate` is valid."
                  },
                  "functionSelector": "372e3546",
                  "id": 2601,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidPoolDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2597,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2596,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2601,
                        "src": "68636:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2595,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68636:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68635:22:0"
                  },
                  "returnParameters": {
                    "id": 2600,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2599,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2601,
                        "src": "68681:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2598,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68681:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68680:6:0"
                  },
                  "scope": 2870,
                  "src": "68607:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2602,
                    "nodeType": "StructuredDocumentation",
                    "src": "68693:147:0",
                    "text": "@param  balancerPool The address of a Balancer Pool.\n@return Whether Maple has approved `balancerPool` for BPT staking."
                  },
                  "functionSelector": "72a22d71",
                  "id": 2609,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidBalancerPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2604,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2609,
                        "src": "68874:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2603,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "68874:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68873:22:0"
                  },
                  "returnParameters": {
                    "id": 2608,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2607,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2609,
                        "src": "68919:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2606,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "68919:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "68918:6:0"
                  },
                  "scope": 2870,
                  "src": "68845:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2610,
                    "nodeType": "StructuredDocumentation",
                    "src": "68931:768:0",
                    "text": "@dev Determines the liquidation path of various assets in Loans and the Treasury. \n@dev The value provided will determine whether or not to perform a bilateral or triangular swap on Uniswap. \n@dev For example, `defaultUniswapPath[WBTC][USDC]` value would indicate what asset to convert WBTC into before conversion to USDC. \n@dev If `defaultUniswapPath[WBTC][USDC] == USDC`, then the swap is bilateral and no middle asset is swapped. \n@dev If `defaultUniswapPath[WBTC][USDC] == WETH`, then swap WBTC for WETH, then WETH for USDC. \n@param  tokenA The address of the asset being swapped.\n@param  tokenB The address of the final asset to receive.\n@return The intermediary asset for swaps, if any."
                  },
                  "functionSelector": "4d866592",
                  "id": 2619,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "defaultUniswapPath",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2615,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2612,
                        "mutability": "mutable",
                        "name": "tokenA",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2619,
                        "src": "69732:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2611,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69732:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2614,
                        "mutability": "mutable",
                        "name": "tokenB",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2619,
                        "src": "69748:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2613,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69748:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69731:32:0"
                  },
                  "returnParameters": {
                    "id": 2618,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2617,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2619,
                        "src": "69787:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2616,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69787:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69786:9:0"
                  },
                  "scope": 2870,
                  "src": "69704:92:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2620,
                    "nodeType": "StructuredDocumentation",
                    "src": "69802:123:0",
                    "text": "@param  asset The address of some token.\n@return The Chainlink Oracle for the price of `asset`."
                  },
                  "functionSelector": "aed019b9",
                  "id": 2627,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "oracleFor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2623,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2622,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2627,
                        "src": "69949:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2621,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69949:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69948:15:0"
                  },
                  "returnParameters": {
                    "id": 2626,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2625,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2627,
                        "src": "69987:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2624,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "69987:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "69986:9:0"
                  },
                  "scope": 2870,
                  "src": "69930:66:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2628,
                    "nodeType": "StructuredDocumentation",
                    "src": "70006:118:0",
                    "text": "@param  poolFactory The address of a Pool Factory.\n@return Whether `poolFactory` is valid."
                  },
                  "functionSelector": "107c0240",
                  "id": 2635,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidPoolFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2631,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2630,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2635,
                        "src": "70157:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2629,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70157:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70156:21:0"
                  },
                  "returnParameters": {
                    "id": 2634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2633,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2635,
                        "src": "70201:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2632,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "70201:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70200:6:0"
                  },
                  "scope": 2870,
                  "src": "70129:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2636,
                    "nodeType": "StructuredDocumentation",
                    "src": "70213:118:0",
                    "text": "@param  loanFactory The address of a Loan Factory.\n@return Whether `loanFactory` is valid."
                  },
                  "functionSelector": "b53afda7",
                  "id": 2643,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidLoanFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2639,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2638,
                        "mutability": "mutable",
                        "name": "loanFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2643,
                        "src": "70364:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2637,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70364:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70363:21:0"
                  },
                  "returnParameters": {
                    "id": 2642,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2641,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2643,
                        "src": "70408:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2640,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "70408:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70407:6:0"
                  },
                  "scope": 2870,
                  "src": "70336:78:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2644,
                    "nodeType": "StructuredDocumentation",
                    "src": "70424:266:0",
                    "text": "@param  superFactory The core factory (e.g. PoolFactory, LoanFactory).\n@param  subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n@return Whether `subFactory` is valid as it relates to `superFactory`."
                  },
                  "functionSelector": "1b1804aa",
                  "id": 2653,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validSubFactories",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2649,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2646,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2653,
                        "src": "70722:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2645,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70722:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2648,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2653,
                        "src": "70744:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2647,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "70744:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70721:42:0"
                  },
                  "returnParameters": {
                    "id": 2652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2651,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2653,
                        "src": "70787:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2650,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "70787:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "70786:6:0"
                  },
                  "scope": 2870,
                  "src": "70695:98:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2654,
                    "nodeType": "StructuredDocumentation",
                    "src": "70803:363:0",
                    "text": "@dev   Sets the Staker cooldown period. \n@dev   This change will affect the existing cool down period for the Stakers that already intended to unstake. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newCooldownPeriod The new value for the cool down period."
                  },
                  "functionSelector": "fd4a9121",
                  "id": 2659,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakerCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2657,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2656,
                        "mutability": "mutable",
                        "name": "newCooldownPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2659,
                        "src": "71204:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2655,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "71204:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71203:27:0"
                  },
                  "returnParameters": {
                    "id": 2658,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71239:0:0"
                  },
                  "scope": 2870,
                  "src": "71171:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2660,
                    "nodeType": "StructuredDocumentation",
                    "src": "71246:368:0",
                    "text": "@dev   Sets the Liquidity Pool cooldown period. \n@dev   This change will affect the existing cool down period for the LPs that already intended to withdraw. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newCooldownPeriod The new value for the cool down period."
                  },
                  "functionSelector": "8608a6e1",
                  "id": 2665,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLpCooldownPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2663,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2662,
                        "mutability": "mutable",
                        "name": "newCooldownPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2665,
                        "src": "71648:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2661,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "71648:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "71647:27:0"
                  },
                  "returnParameters": {
                    "id": 2664,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "71683:0:0"
                  },
                  "scope": 2870,
                  "src": "71619:65:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2666,
                    "nodeType": "StructuredDocumentation",
                    "src": "71690:349:0",
                    "text": "@dev   Sets the Staker unstake window. \n@dev   This change will affect the existing window for the Stakers that already intended to unstake. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newUnstakeWindow The new value for the unstake window."
                  },
                  "functionSelector": "d1cdf301",
                  "id": 2671,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakerUnstakeWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2669,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2668,
                        "mutability": "mutable",
                        "name": "newUnstakeWindow",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2671,
                        "src": "72076:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72076:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72075:26:0"
                  },
                  "returnParameters": {
                    "id": 2670,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72110:0:0"
                  },
                  "scope": 2870,
                  "src": "72044:67:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2672,
                    "nodeType": "StructuredDocumentation",
                    "src": "72117:359:0",
                    "text": "@dev   Sets the Liquidity Pool withdraw window. \n@dev   This change will affect the existing window for the LPs that already intended to withdraw. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newLpWithdrawWindow The new value for the withdraw window."
                  },
                  "functionSelector": "26718606",
                  "id": 2677,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLpWithdrawWindow",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2675,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2674,
                        "mutability": "mutable",
                        "name": "newLpWithdrawWindow",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2677,
                        "src": "72510:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2673,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72510:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72509:29:0"
                  },
                  "returnParameters": {
                    "id": 2676,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72547:0:0"
                  },
                  "scope": 2870,
                  "src": "72481:67:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2678,
                    "nodeType": "StructuredDocumentation",
                    "src": "72554:280:0",
                    "text": "@dev   Sets the allowed Uniswap slippage percentage, in basis points. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param newMaxSlippage The new max slippage percentage (in basis points)"
                  },
                  "functionSelector": "f33ef09a",
                  "id": 2683,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMaxSwapSlippage",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2681,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2680,
                        "mutability": "mutable",
                        "name": "newMaxSlippage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2683,
                        "src": "72867:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2679,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "72867:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "72866:24:0"
                  },
                  "returnParameters": {
                    "id": 2682,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "72899:0:0"
                  },
                  "scope": 2870,
                  "src": "72839:61:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2684,
                    "nodeType": "StructuredDocumentation",
                    "src": "72906:211:0",
                    "text": "@dev   Sets the Global Admin. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalAdminSet` event. \n@param newGlobalAdmin The new global admin address."
                  },
                  "functionSelector": "c52bc31d",
                  "id": 2689,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobalAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2687,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2686,
                        "mutability": "mutable",
                        "name": "newGlobalAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2689,
                        "src": "73146:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2685,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73146:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73145:24:0"
                  },
                  "returnParameters": {
                    "id": 2688,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "73178:0:0"
                  },
                  "scope": 2870,
                  "src": "73122:57:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2690,
                    "nodeType": "StructuredDocumentation",
                    "src": "73185:314:0",
                    "text": "@dev   Sets the validity of a Balancer Pool. \n@dev   Only the Governor can call this function. \n@dev   It emits a `BalancerPoolSet` event. \n@param balancerPool The address of Balancer Pool contract.\n@param valid        The new validity status of a Balancer Pool."
                  },
                  "functionSelector": "490dae64",
                  "id": 2697,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidBalancerPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2692,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2697,
                        "src": "73534:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2691,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "73534:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2694,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2697,
                        "src": "73556:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2693,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "73556:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73533:34:0"
                  },
                  "returnParameters": {
                    "id": 2696,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "73576:0:0"
                  },
                  "scope": 2870,
                  "src": "73504:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2698,
                    "nodeType": "StructuredDocumentation",
                    "src": "73583:290:0",
                    "text": "@dev   Sets the paused/unpaused state of the protocol. \n@dev   Only the Global Admin can call this function. \n@dev   It emits a `ProtocolPaused` event. \n@param pause A boolean flag to switch externally facing functionality in the protocol on/off."
                  },
                  "functionSelector": "4e989118",
                  "id": 2703,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setProtocolPause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2701,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2700,
                        "mutability": "mutable",
                        "name": "pause",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2703,
                        "src": "73904:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2699,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "73904:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "73903:12:0"
                  },
                  "returnParameters": {
                    "id": 2702,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "73924:0:0"
                  },
                  "scope": 2870,
                  "src": "73878:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2704,
                    "nodeType": "StructuredDocumentation",
                    "src": "73931:247:0",
                    "text": "@dev   Sets the validity of a PoolFactory. \n@dev   Only the Governor can call this function. \n@param poolFactory The address of a PoolFactory.\n@param valid       The new validity status of `poolFactory`."
                  },
                  "functionSelector": "6597b899",
                  "id": 2711,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidPoolFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2709,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2706,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2711,
                        "src": "74212:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2705,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74212:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2708,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2711,
                        "src": "74233:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2707,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "74233:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74211:33:0"
                  },
                  "returnParameters": {
                    "id": 2710,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "74253:0:0"
                  },
                  "scope": 2870,
                  "src": "74183:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2712,
                    "nodeType": "StructuredDocumentation",
                    "src": "74260:247:0",
                    "text": "@dev   Sets the validity of a LoanFactory. \n@dev   Only the Governor can call this function. \n@param loanFactory The address of a LoanFactory.\n@param valid       The new validity status of `loanFactory`."
                  },
                  "functionSelector": "c9c67240",
                  "id": 2719,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidLoanFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2717,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2714,
                        "mutability": "mutable",
                        "name": "loanFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2719,
                        "src": "74541:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2713,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "74541:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2716,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2719,
                        "src": "74562:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2715,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "74562:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "74540:33:0"
                  },
                  "returnParameters": {
                    "id": 2718,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "74582:0:0"
                  },
                  "scope": 2870,
                  "src": "74512:71:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2720,
                    "nodeType": "StructuredDocumentation",
                    "src": "74589:428:0",
                    "text": "@dev   Sets the validity of `subFactory` as it relates to `superFactory`. \n@dev   Only the Governor can call this function. \n@param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n@param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n@param valid        The new validity status of `subFactory` within context of `superFactory`."
                  },
                  "functionSelector": "f85ee6f8",
                  "id": 2729,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setValidSubFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2727,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2722,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2729,
                        "src": "75050:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2721,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75050:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2724,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2729,
                        "src": "75072:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2723,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75072:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2726,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2729,
                        "src": "75092:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2725,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "75092:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "75049:54:0"
                  },
                  "returnParameters": {
                    "id": 2728,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "75112:0:0"
                  },
                  "scope": 2870,
                  "src": "75022:91:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2730,
                    "nodeType": "StructuredDocumentation",
                    "src": "75119:472:0",
                    "text": "@dev   Sets the path to swap an asset through Uniswap. \n@dev   Only the Governor can call this function. \n@dev   Set to == mid to enable a bilateral swap (single path swap). \n@dev   Set to != mid to enable a triangular swap (multi path swap). \n@param from The address of the asset being swapped.\n@param to   The address of the final asset to receive.\n@param mid  The intermediary asset for swaps, if any."
                  },
                  "functionSelector": "f3897663",
                  "id": 2739,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setDefaultUniswapPath",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2737,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2732,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2739,
                        "src": "75627:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75627:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2734,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2739,
                        "src": "75641:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2733,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75641:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2736,
                        "mutability": "mutable",
                        "name": "mid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2739,
                        "src": "75653:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2735,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "75653:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "75626:39:0"
                  },
                  "returnParameters": {
                    "id": 2738,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "75674:0:0"
                  },
                  "scope": 2870,
                  "src": "75596:79:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2740,
                    "nodeType": "StructuredDocumentation",
                    "src": "75681:346:0",
                    "text": "@dev   Sets the validity of a Pool Delegate (those allowed to create Pools). \n@dev   Only the Governor can call this function. \n@dev   It emits a `PoolDelegateSet` event. \n@param poolDelegate The address to manage permissions for.\n@param valid        The new validity status of a Pool Delegate."
                  },
                  "functionSelector": "efdb16fc",
                  "id": 2747,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolDelegateAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2745,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2742,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2747,
                        "src": "76066:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2741,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76066:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2744,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2747,
                        "src": "76088:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2743,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "76088:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "76065:34:0"
                  },
                  "returnParameters": {
                    "id": 2746,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "76108:0:0"
                  },
                  "scope": 2870,
                  "src": "76032:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2748,
                    "nodeType": "StructuredDocumentation",
                    "src": "76115:308:0",
                    "text": "@dev   Sets the validity of an asset for collateral. \n@dev   Only the Governor can call this function. \n@dev   It emits a `CollateralAssetSet` event. \n@param asset The asset to assign validity to.\n@param valid The new validity status of a Collateral Asset."
                  },
                  "functionSelector": "2fa6c88f",
                  "id": 2755,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setCollateralAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2750,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2755,
                        "src": "76456:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2749,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76456:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2752,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2755,
                        "src": "76471:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2751,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "76471:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "76455:27:0"
                  },
                  "returnParameters": {
                    "id": 2754,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "76491:0:0"
                  },
                  "scope": 2870,
                  "src": "76428:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2756,
                    "nodeType": "StructuredDocumentation",
                    "src": "76498:320:0",
                    "text": "@dev   Sets the validity of an asset for liquidity in Pools. \n@dev   Only the Governor can call this function. \n@dev   It emits a `LiquidityAssetSet` event. \n@param asset The asset to assign validity to.\n@param valid The new validity status a Liquidity Asset in Pools."
                  },
                  "functionSelector": "2daa0d89",
                  "id": 2763,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2758,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2763,
                        "src": "76850:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2757,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "76850:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2760,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2763,
                        "src": "76865:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2759,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "76865:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "76849:27:0"
                  },
                  "returnParameters": {
                    "id": 2762,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "76885:0:0"
                  },
                  "scope": 2870,
                  "src": "76823:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2764,
                    "nodeType": "StructuredDocumentation",
                    "src": "76892:236:0",
                    "text": "@dev   Sets the validity of a calculator contract. \n@dev   Only the Governor can call this function. \n@param calc  The Calculator address.\n@param valid The new validity status of a Calculator."
                  },
                  "functionSelector": "be44ed6b",
                  "id": 2771,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2766,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2771,
                        "src": "77150:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2765,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "77150:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2768,
                        "mutability": "mutable",
                        "name": "valid",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2771,
                        "src": "77164:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2767,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "77164:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77149:26:0"
                  },
                  "returnParameters": {
                    "id": 2770,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77184:0:0"
                  },
                  "scope": 2870,
                  "src": "77133:52:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2772,
                    "nodeType": "StructuredDocumentation",
                    "src": "77191:225:0",
                    "text": "@dev   Sets the investor fee (in basis points). \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _fee The fee, e.g., 50 = 0.50%."
                  },
                  "functionSelector": "5e045467",
                  "id": 2777,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setInvestorFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2775,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2774,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2777,
                        "src": "77445:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2773,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "77445:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77444:14:0"
                  },
                  "returnParameters": {
                    "id": 2776,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77467:0:0"
                  },
                  "scope": 2870,
                  "src": "77421:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2778,
                    "nodeType": "StructuredDocumentation",
                    "src": "77474:225:0",
                    "text": "@dev   Sets the treasury fee (in basis points). \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _fee The fee, e.g., 50 = 0.50%."
                  },
                  "functionSelector": "77e741c7",
                  "id": 2783,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setTreasuryFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2781,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2780,
                        "mutability": "mutable",
                        "name": "_fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2783,
                        "src": "77728:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2779,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "77728:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "77727:14:0"
                  },
                  "returnParameters": {
                    "id": 2782,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "77750:0:0"
                  },
                  "scope": 2870,
                  "src": "77704:47:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2784,
                    "nodeType": "StructuredDocumentation",
                    "src": "77757:220:0",
                    "text": "@dev   Sets the MapleTreasury. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _mapleTreasury A new MapleTreasury address."
                  },
                  "functionSelector": "7303de25",
                  "id": 2789,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMapleTreasury",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2787,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2786,
                        "mutability": "mutable",
                        "name": "_mapleTreasury",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2789,
                        "src": "78008:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2785,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "78008:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78007:24:0"
                  },
                  "returnParameters": {
                    "id": 2788,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78040:0:0"
                  },
                  "scope": 2870,
                  "src": "77982:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2790,
                    "nodeType": "StructuredDocumentation",
                    "src": "78047:257:0",
                    "text": "@dev   Sets the default grace period. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _defaultGracePeriod The new number of seconds to set the grace period to."
                  },
                  "functionSelector": "44c14f71",
                  "id": 2795,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setDefaultGracePeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2793,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2792,
                        "mutability": "mutable",
                        "name": "_defaultGracePeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2795,
                        "src": "78340:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2791,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "78340:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78339:29:0"
                  },
                  "returnParameters": {
                    "id": 2794,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78377:0:0"
                  },
                  "scope": 2870,
                  "src": "78309:69:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2796,
                    "nodeType": "StructuredDocumentation",
                    "src": "78384:285:0",
                    "text": "@dev   Sets the minimum Loan equity. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _minLoanEquity The new minimum percentage of Loan equity an account must have to trigger liquidations."
                  },
                  "functionSelector": "298b795d",
                  "id": 2801,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setMinLoanEquity",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2799,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2798,
                        "mutability": "mutable",
                        "name": "_minLoanEquity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2801,
                        "src": "78700:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2797,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "78700:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "78699:24:0"
                  },
                  "returnParameters": {
                    "id": 2800,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "78732:0:0"
                  },
                  "scope": 2870,
                  "src": "78674:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2802,
                    "nodeType": "StructuredDocumentation",
                    "src": "78739:251:0",
                    "text": "@dev   Sets the funding period. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param _fundingPeriod The number of seconds to set the drawdown grace period to."
                  },
                  "functionSelector": "2a5aa292",
                  "id": 2807,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setFundingPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2805,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2804,
                        "mutability": "mutable",
                        "name": "_fundingPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2807,
                        "src": "79021:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2803,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "79021:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79020:24:0"
                  },
                  "returnParameters": {
                    "id": 2806,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79053:0:0"
                  },
                  "scope": 2870,
                  "src": "78995:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2808,
                    "nodeType": "StructuredDocumentation",
                    "src": "79060:252:0",
                    "text": "@dev   Sets the the minimum Pool cover required to finalize a Pool. \n@dev   Only the Governor can call this function. \n@dev   It emits a `GlobalsParamSet` event. \n@param amt The new minimum swap out required."
                  },
                  "functionSelector": "dbc6c552",
                  "id": 2813,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setSwapOutRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2811,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2810,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2813,
                        "src": "79345:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2809,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "79345:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79344:13:0"
                  },
                  "returnParameters": {
                    "id": 2812,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79366:0:0"
                  },
                  "scope": 2870,
                  "src": "79317:50:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2814,
                    "nodeType": "StructuredDocumentation",
                    "src": "79373:282:0",
                    "text": "@dev   Sets a price feed's oracle. \n@dev   Only the Governor can call this function. \n@dev   It emits a `OracleSet` event. \n@param asset  The asset to update price for.\n@param oracle The new Oracle to use for the price of `asset`."
                  },
                  "functionSelector": "67a74ddc",
                  "id": 2821,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPriceOracle",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2819,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2816,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2821,
                        "src": "79684:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2815,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "79684:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2818,
                        "mutability": "mutable",
                        "name": "oracle",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2821,
                        "src": "79699:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2817,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "79699:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "79683:31:0"
                  },
                  "returnParameters": {
                    "id": 2820,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "79723:0:0"
                  },
                  "scope": 2870,
                  "src": "79660:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2822,
                    "nodeType": "StructuredDocumentation",
                    "src": "79730:305:0",
                    "text": "@dev   Sets a new Pending Governor. \n@dev   This address can become Governor if they accept. \n@dev   Only the Governor can call this function. \n@dev   It emits a `PendingGovernorSet` event. \n@param _pendingGovernor The address of a new Pending Governor."
                  },
                  "functionSelector": "f235757f",
                  "id": 2827,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPendingGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2825,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2824,
                        "mutability": "mutable",
                        "name": "_pendingGovernor",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2827,
                        "src": "80068:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2823,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "80068:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80067:26:0"
                  },
                  "returnParameters": {
                    "id": 2826,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80102:0:0"
                  },
                  "scope": 2870,
                  "src": "80040:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2828,
                    "nodeType": "StructuredDocumentation",
                    "src": "80109:170:0",
                    "text": "@dev Accept the Governor position. \n@dev Only the Pending Governor can call this function. \n@dev It emits a `GovernorAccepted` event. "
                  },
                  "functionSelector": "e58bb639",
                  "id": 2831,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "acceptGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80307:2:0"
                  },
                  "returnParameters": {
                    "id": 2830,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "80318:0:0"
                  },
                  "scope": 2870,
                  "src": "80284:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2832,
                    "nodeType": "StructuredDocumentation",
                    "src": "80325:171:0",
                    "text": "@dev    Fetch price for asset from Chainlink oracles.\n@param  asset The asset to fetch the price of.\n@return The price of asset in USD."
                  },
                  "functionSelector": "16345f18",
                  "id": 2839,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLatestPrice",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2834,
                        "mutability": "mutable",
                        "name": "asset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2839,
                        "src": "80525:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2833,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "80525:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80524:15:0"
                  },
                  "returnParameters": {
                    "id": 2838,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2837,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2839,
                        "src": "80563:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2836,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "80563:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "80562:9:0"
                  },
                  "scope": 2870,
                  "src": "80501:71:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2840,
                    "nodeType": "StructuredDocumentation",
                    "src": "80578:641:0",
                    "text": "@dev   Checks that a `subFactory` is valid as it relates to `superFactory`.\n@param superFactory The core factory (e.g. PoolFactory, LoanFactory).\n@param subFactory   The sub factory used by core factory (e.g. LiquidityLockerFactory).\n@param factoryType  The type expected for the subFactory. \n0 = COLLATERAL_LOCKER_FACTORY, \n1 = DEBT_LOCKER_FACTORY, \n2 = FUNDING_LOCKER_FACTORY, \n3 = LIQUIDITY_LOCKER_FACTORY, \n4 = STAKE_LOCKER_FACTORY. "
                  },
                  "functionSelector": "13d459fb",
                  "id": 2851,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidSubFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2847,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2842,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81251:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2841,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "81251:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2844,
                        "mutability": "mutable",
                        "name": "subFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81273:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2843,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "81273:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2846,
                        "mutability": "mutable",
                        "name": "factoryType",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81293:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2845,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "81293:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81250:61:0"
                  },
                  "returnParameters": {
                    "id": 2850,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2849,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2851,
                        "src": "81335:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2848,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "81335:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81334:6:0"
                  },
                  "scope": 2870,
                  "src": "81224:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2852,
                    "nodeType": "StructuredDocumentation",
                    "src": "81347:154:0",
                    "text": "@dev   Checks that a Calculator is valid.\n@param calc     The Calculator address.\n@param calcType The Calculator type."
                  },
                  "functionSelector": "1b5833f7",
                  "id": 2861,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isValidCalc",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2857,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2854,
                        "mutability": "mutable",
                        "name": "calc",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2861,
                        "src": "81527:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2853,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "81527:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2856,
                        "mutability": "mutable",
                        "name": "calcType",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2861,
                        "src": "81541:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2855,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "81541:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81526:30:0"
                  },
                  "returnParameters": {
                    "id": 2860,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2859,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2861,
                        "src": "81580:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2858,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "81580:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81579:6:0"
                  },
                  "scope": 2870,
                  "src": "81506:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2862,
                    "nodeType": "StructuredDocumentation",
                    "src": "81592:208:0",
                    "text": "@dev    Returns the `lpCooldownPeriod` and `lpWithdrawWindow` as a tuple, for convenience.\n@return The value of `lpCooldownPeriod`.\n@return The value of `lpWithdrawWindow`."
                  },
                  "functionSelector": "9f51290b",
                  "id": 2869,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getLpCooldownParams",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2863,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "81833:2:0"
                  },
                  "returnParameters": {
                    "id": 2868,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2865,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2869,
                        "src": "81859:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2864,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "81859:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2867,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2869,
                        "src": "81868:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2866,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "81868:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "81858:18:0"
                  },
                  "scope": 2870,
                  "src": "81805:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "61234:20646:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2871,
                "nodeType": "StructuredDocumentation",
                "src": "82095:85:0",
                "text": "@title LiquidityLocker holds custody of Liquidity Asset tokens for a given Pool."
              },
              "fullyImplemented": false,
              "id": 2902,
              "linearizedBaseContracts": [
                2902
              ],
              "name": "ILiquidityLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 2872,
                    "nodeType": "StructuredDocumentation",
                    "src": "82214:82:0",
                    "text": "@dev The Pool contract address that owns this LiquidityLocker."
                  },
                  "functionSelector": "16f0115b",
                  "id": 2877,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2873,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82314:2:0"
                  },
                  "returnParameters": {
                    "id": 2876,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2875,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2877,
                        "src": "82340:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2874,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "82340:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82339:9:0"
                  },
                  "scope": 2902,
                  "src": "82301:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2878,
                    "nodeType": "StructuredDocumentation",
                    "src": "82355:84:0",
                    "text": "@dev The Liquidity Asset which this LiquidityLocker will escrow."
                  },
                  "functionSelector": "209b2bca",
                  "id": 2883,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2879,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82467:2:0"
                  },
                  "returnParameters": {
                    "id": 2882,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2881,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2883,
                        "src": "82493:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 2880,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "82493:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82492:8:0"
                  },
                  "scope": 2902,
                  "src": "82444:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2884,
                    "nodeType": "StructuredDocumentation",
                    "src": "82507:272:0",
                    "text": "@dev   Transfers amount of Liquidity Asset to a destination account. \n@dev   Only the Pool can call this function. \n@param dst The destination to transfer Liquidity Asset to.\n@param amt The amount of Liquidity Asset to transfer."
                  },
                  "functionSelector": "a9059cbb",
                  "id": 2891,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2889,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2886,
                        "mutability": "mutable",
                        "name": "dst",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2891,
                        "src": "82802:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2885,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "82802:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2888,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2891,
                        "src": "82815:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2887,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "82815:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "82801:26:0"
                  },
                  "returnParameters": {
                    "id": 2890,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "82836:0:0"
                  },
                  "scope": 2902,
                  "src": "82784:53:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2892,
                    "nodeType": "StructuredDocumentation",
                    "src": "82843:335:0",
                    "text": "@dev   Funds a Loan using available assets in this LiquidityLocker. \n@dev   Only the Pool can call this function. \n@param loan       The Loan to fund.\n@param debtLocker The DebtLocker that will escrow debt tokens.\n@param amount     The amount of Liquidity Asset to fund the Loan for."
                  },
                  "functionSelector": "1aa37cec",
                  "id": 2901,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2899,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2894,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2901,
                        "src": "83201:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2893,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83201:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2896,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2901,
                        "src": "83215:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2895,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83215:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2898,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2901,
                        "src": "83235:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2897,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "83235:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83200:50:0"
                  },
                  "returnParameters": {
                    "id": 2900,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "83259:0:0"
                  },
                  "scope": 2902,
                  "src": "83183:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "82180:1083:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 2904,
                    "name": "ISubFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 596,
                    "src": "83568:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISubFactory_$596",
                      "typeString": "contract ISubFactory"
                    }
                  },
                  "id": 2905,
                  "nodeType": "InheritanceSpecifier",
                  "src": "83568:11:0"
                }
              ],
              "contractDependencies": [
                596
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 2903,
                "nodeType": "StructuredDocumentation",
                "src": "83466:65:0",
                "text": "@title LiquidityLockerFactory instantiates LiquidityLockers."
              },
              "fullyImplemented": false,
              "id": 2946,
              "linearizedBaseContracts": [
                2946,
                596
              ],
              "name": "ILiquidityLockerFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2906,
                    "nodeType": "StructuredDocumentation",
                    "src": "83587:290:0",
                    "text": "@dev   Emits an event indicating a LiquidityLocker was created.\n@param owner           The owner of the LiquidityLocker.\n@param liquidityLocker The address of the LiquidityLocker.\n@param liquidityAsset  The Liquidity Asset of the LiquidityLocker."
                  },
                  "id": 2914,
                  "name": "LiquidityLockerCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2913,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2908,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2914,
                        "src": "83911:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2907,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83911:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2910,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2914,
                        "src": "83934:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2909,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83934:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2912,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2914,
                        "src": "83959:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2911,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "83959:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "83910:72:0"
                  },
                  "src": "83882:101:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2915,
                    "nodeType": "StructuredDocumentation",
                    "src": "83989:159:0",
                    "text": "@param  liquidityLocker The address of a LiquidityLocker.\n@return The address of the owner of LiquidityLocker at `liquidityLocker`."
                  },
                  "functionSelector": "666e1b39",
                  "id": 2922,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2918,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2917,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2922,
                        "src": "84168:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2916,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84168:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84167:25:0"
                  },
                  "returnParameters": {
                    "id": 2921,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2920,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2922,
                        "src": "84216:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2919,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84216:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84215:9:0"
                  },
                  "scope": 2946,
                  "src": "84153:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2923,
                    "nodeType": "StructuredDocumentation",
                    "src": "84231:159:0",
                    "text": "@param  liquidityLocker The address of a LiquidityLocker.\n@return The address of the owner of LiquidityLocker at `liquidityLocker`."
                  },
                  "functionSelector": "2ec63d7c",
                  "id": 2930,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2926,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2925,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2930,
                        "src": "84413:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2924,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84413:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84412:25:0"
                  },
                  "returnParameters": {
                    "id": 2929,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2928,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2930,
                        "src": "84461:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2927,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "84461:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84460:6:0"
                  },
                  "scope": 2946,
                  "src": "84395:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    595
                  ],
                  "body": null,
                  "documentation": {
                    "id": 2931,
                    "nodeType": "StructuredDocumentation",
                    "src": "84473:93:0",
                    "text": "@dev The type of the factory (i.e FactoryType::LIQUIDITY_LOCKER_FACTORY)."
                  },
                  "functionSelector": "64e1fd55",
                  "id": 2937,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2933,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "84603:8:0"
                  },
                  "parameters": {
                    "id": 2932,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "84591:2:0"
                  },
                  "returnParameters": {
                    "id": 2936,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2935,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2937,
                        "src": "84626:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2934,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "84626:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84625:7:0"
                  },
                  "scope": 2946,
                  "src": "84571:62:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2938,
                    "nodeType": "StructuredDocumentation",
                    "src": "84639:294:0",
                    "text": "@dev    Instantiates a LiquidityLocker contract.\n@dev    It emits a `LiquidityLockerCreated` event.\n@param  liquidityAsset  The Liquidity Asset this LiquidityLocker will escrow.\n@return liquidityLocker The address of the instantiated LiquidityLocker."
                  },
                  "functionSelector": "19eb783a",
                  "id": 2945,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "newLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2941,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2940,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2945,
                        "src": "84957:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2939,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84957:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84956:24:0"
                  },
                  "returnParameters": {
                    "id": 2944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2943,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2945,
                        "src": "84999:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2942,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "84999:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "84998:25:0"
                  },
                  "scope": 2946,
                  "src": "84938:86:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "83531:1496:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2947,
                "nodeType": "StructuredDocumentation",
                "src": "85207:43:0",
                "text": "@title LoanFactory instantiates Loans."
              },
              "fullyImplemented": false,
              "id": 3092,
              "linearizedBaseContracts": [
                3092
              ],
              "name": "ILoanFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2948,
                    "nodeType": "StructuredDocumentation",
                    "src": "85280:253:0",
                    "text": "@dev   Emits an event indicating a LoanFactoryAdmin was allowed.\n@param loanFactoryAdmin The address of a LoanFactoryAdmin.\n@param allowed          Whether `loanFactoryAdmin` is allowed as an admin of the LoanFactory."
                  },
                  "id": 2954,
                  "name": "LoanFactoryAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2953,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2950,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loanFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2954,
                        "src": "85564:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2949,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "85564:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2952,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2954,
                        "src": "85598:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2951,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "85598:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "85563:48:0"
                  },
                  "src": "85538:74:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2955,
                    "nodeType": "StructuredDocumentation",
                    "src": "85618:1176:0",
                    "text": "@dev   Emits an event indicating a Loan was created.\n@param loan             The address of the Loan.\n@param borrower         The Borrower.\n@param liquidityAsset   The asset the Loan will raise funding in.\n@param collateralAsset  The asset the Loan will use as collateral.\n@param collateralLocker The address of the Collateral Locker.\n@param fundingLocker    The address of the Funding Locker.\n@param specs            The specifications for the Loan. \n[0] => apr, \n[1] => termDays, \n[2] => paymentIntervalDays, \n[3] => requestAmount, \n[4] => collateralRatio. \n@param calcs            The calculators used for the Loan. \n[0] => repaymentCalc, \n[1] => lateFeeCalc, \n[2] => premiumCalc. \n@param name             The name of the Loan FDTs.\n@param symbol           The symbol of the Loan FDTs."
                  },
                  "id": 2981,
                  "name": "LoanCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2957,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86826:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2956,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86826:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2959,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "borrower",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86848:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2958,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86848:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2961,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86882:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2960,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86882:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2963,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86922:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2962,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86922:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2965,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "collateralLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86955:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2964,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86955:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2967,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fundingLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "86989:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2966,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "86989:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2971,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "specs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87020:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$5_memory_ptr",
                          "typeString": "uint256[5]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2968,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "87020:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2970,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "35",
                            "id": 2969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "87028:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "87020:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                            "typeString": "uint256[5]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2975,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "calcs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87046:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                          "typeString": "address[3]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2972,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "87046:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 2974,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "33",
                            "id": 2973,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "87054:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "87046:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$3_storage_ptr",
                            "typeString": "address[3]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2977,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87072:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2976,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "87072:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2979,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2981,
                        "src": "87093:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 2978,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "87093:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "86816:296:0"
                  },
                  "src": "86799:314:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2982,
                    "nodeType": "StructuredDocumentation",
                    "src": "87119:71:0",
                    "text": "@dev The Factory type of `CollateralLockerFactory`."
                  },
                  "functionSelector": "e70dd6cf",
                  "id": 2987,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "CL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2983,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87214:2:0"
                  },
                  "returnParameters": {
                    "id": 2986,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2985,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2987,
                        "src": "87240:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2984,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87240:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87239:7:0"
                  },
                  "scope": 3092,
                  "src": "87195:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2988,
                    "nodeType": "StructuredDocumentation",
                    "src": "87253:68:0",
                    "text": "@dev The Factory type of `FundingLockerFactory`."
                  },
                  "functionSelector": "38505fb0",
                  "id": 2993,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "FL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2989,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87345:2:0"
                  },
                  "returnParameters": {
                    "id": 2992,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2991,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2993,
                        "src": "87371:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2990,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87371:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87370:7:0"
                  },
                  "scope": 3092,
                  "src": "87326:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 2994,
                    "nodeType": "StructuredDocumentation",
                    "src": "87384:58:0",
                    "text": "@dev The Calc type of `RepaymentCalc`."
                  },
                  "functionSelector": "8c38922f",
                  "id": 2999,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "INTEREST_CALC_TYPE",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 2995,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87474:2:0"
                  },
                  "returnParameters": {
                    "id": 2998,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2997,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 2999,
                        "src": "87500:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 2996,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87500:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87499:7:0"
                  },
                  "scope": 3092,
                  "src": "87447:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3000,
                    "nodeType": "StructuredDocumentation",
                    "src": "87513:56:0",
                    "text": "@dev The Calc type of `LateFeeCalc`."
                  },
                  "functionSelector": "3493f4ca",
                  "id": 3005,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "LATEFEE_CALC_TYPE",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3001,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87600:2:0"
                  },
                  "returnParameters": {
                    "id": 3004,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3003,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3005,
                        "src": "87626:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3002,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87626:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87625:7:0"
                  },
                  "scope": 3092,
                  "src": "87574:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3006,
                    "nodeType": "StructuredDocumentation",
                    "src": "87639:56:0",
                    "text": "@dev The Calc type of `PremiumCalc`."
                  },
                  "functionSelector": "7a8fe3c0",
                  "id": 3011,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "PREMIUM_CALC_TYPE",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3007,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87726:2:0"
                  },
                  "returnParameters": {
                    "id": 3010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3009,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3011,
                        "src": "87752:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3008,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "87752:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87751:7:0"
                  },
                  "scope": 3092,
                  "src": "87700:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3012,
                    "nodeType": "StructuredDocumentation",
                    "src": "87765:58:0",
                    "text": "@dev The instance of the MapleGlobals."
                  },
                  "functionSelector": "c3124525",
                  "id": 3017,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3013,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87844:2:0"
                  },
                  "returnParameters": {
                    "id": 3016,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3015,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3017,
                        "src": "87870:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3014,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "87870:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "87869:15:0"
                  },
                  "scope": 3092,
                  "src": "87828:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3018,
                    "nodeType": "StructuredDocumentation",
                    "src": "87891:69:0",
                    "text": "@dev The incrementor for number of Loans created."
                  },
                  "functionSelector": "ee9b75b5",
                  "id": 3023,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loansCreated",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3019,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "87986:2:0"
                  },
                  "returnParameters": {
                    "id": 3022,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3021,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3023,
                        "src": "88012:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3020,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "88012:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88011:9:0"
                  },
                  "scope": 3092,
                  "src": "87965:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3024,
                    "nodeType": "StructuredDocumentation",
                    "src": "88027:106:0",
                    "text": "@param  index The index of a Loan.\n@return The address of the Loan at `index`."
                  },
                  "functionSelector": "e1ec3c68",
                  "id": 3031,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loans",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3027,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3026,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3031,
                        "src": "88153:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3025,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "88153:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88152:15:0"
                  },
                  "returnParameters": {
                    "id": 3030,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3029,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3031,
                        "src": "88191:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3028,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88191:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88190:9:0"
                  },
                  "scope": 3092,
                  "src": "88138:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3032,
                    "nodeType": "StructuredDocumentation",
                    "src": "88206:97:0",
                    "text": "@param  loan The address of a Loan.\n@return Whether `loan` is a Loan."
                  },
                  "functionSelector": "2819cbc2",
                  "id": 3039,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3035,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3034,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3039,
                        "src": "88324:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3033,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88324:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88323:14:0"
                  },
                  "returnParameters": {
                    "id": 3038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3037,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3039,
                        "src": "88361:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3036,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "88361:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88360:6:0"
                  },
                  "scope": 3092,
                  "src": "88308:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3040,
                    "nodeType": "StructuredDocumentation",
                    "src": "88373:172:0",
                    "text": "@param  admin The address of a LoanFactoryAdmin.\n@return Whether `admin` has permission to do certain operations in case of disaster management."
                  },
                  "functionSelector": "a620e0ac",
                  "id": 3047,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "loanFactoryAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3043,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3042,
                        "mutability": "mutable",
                        "name": "admin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3047,
                        "src": "88577:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3041,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88577:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88576:15:0"
                  },
                  "returnParameters": {
                    "id": 3046,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3045,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3047,
                        "src": "88615:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3044,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "88615:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88614:6:0"
                  },
                  "scope": 3092,
                  "src": "88550:71:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3048,
                    "nodeType": "StructuredDocumentation",
                    "src": "88627:159:0",
                    "text": "@dev   Sets MapleGlobals. \n@dev   Only the Governor can call this function. \n@param newGlobals Address of new MapleGlobals."
                  },
                  "functionSelector": "cc2e0a26",
                  "id": 3053,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3050,
                        "mutability": "mutable",
                        "name": "newGlobals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3053,
                        "src": "88811:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3049,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "88811:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "88810:20:0"
                  },
                  "returnParameters": {
                    "id": 3052,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "88839:0:0"
                  },
                  "scope": 3092,
                  "src": "88791:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3054,
                    "nodeType": "StructuredDocumentation",
                    "src": "88846:1071:0",
                    "text": "@dev    Create a new Loan. \n@dev    It emits a `LoanCreated` event. \n@param  liquidityAsset  The asset the Loan will raise funding in.\n@param  collateralAsset The asset the Loan will use as collateral.\n@param  flFactory       The factory to instantiate a FundingLocker from.\n@param  clFactory       The factory to instantiate a CollateralLocker from.\n@param  specs           The specifications for the Loan. \n[0] => apr, \n[1] => termDays, \n[2] => paymentIntervalDays, \n[3] => requestAmount, \n[4] => collateralRatio. \n@param  calcs           The calculators used for the Loan. \n[0] => repaymentCalc, \n[1] => lateFeeCalc, \n[2] => premiumCalc. \n@return loanAddress     Address of the instantiated Loan."
                  },
                  "functionSelector": "d5ab2074",
                  "id": 3075,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3071,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3056,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "89951:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3055,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89951:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3058,
                        "mutability": "mutable",
                        "name": "collateralAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "89983:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3057,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "89983:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3060,
                        "mutability": "mutable",
                        "name": "flFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90016:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3059,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90016:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3062,
                        "mutability": "mutable",
                        "name": "clFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90043:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3061,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90043:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3066,
                        "mutability": "mutable",
                        "name": "specs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90070:23:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$5_memory_ptr",
                          "typeString": "uint256[5]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3063,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "90070:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3065,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "35",
                            "id": 3064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "90078:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_5_by_1",
                              "typeString": "int_const 5"
                            },
                            "value": "5"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "90070:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$5_storage_ptr",
                            "typeString": "uint256[5]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3070,
                        "mutability": "mutable",
                        "name": "calcs",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90103:23:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$3_memory_ptr",
                          "typeString": "address[3]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3067,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "90103:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3069,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "33",
                            "id": 3068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "90111:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_3_by_1",
                              "typeString": "int_const 3"
                            },
                            "value": "3"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "90103:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$3_storage_ptr",
                            "typeString": "address[3]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "89941:191:0"
                  },
                  "returnParameters": {
                    "id": 3074,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3073,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3075,
                        "src": "90151:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3072,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90151:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "90150:9:0"
                  },
                  "scope": 3092,
                  "src": "89922:238:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3076,
                    "nodeType": "StructuredDocumentation",
                    "src": "90166:322:0",
                    "text": "@dev   Sets a LoanFactory Admin. Only the Governor can call this function.\n@dev   It emits a `LoanFactoryAdminSet` event.\n@param loanFactoryAdmin An address being allowed or disallowed as a LoanFactory Admin.\n@param allowed          The status of `loanFactoryAdmin` as an Admin."
                  },
                  "functionSelector": "2cd0aca0",
                  "id": 3083,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLoanFactoryAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3081,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3078,
                        "mutability": "mutable",
                        "name": "loanFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3083,
                        "src": "90522:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3077,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "90522:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3080,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3083,
                        "src": "90548:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3079,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "90548:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "90521:40:0"
                  },
                  "returnParameters": {
                    "id": 3082,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90570:0:0"
                  },
                  "scope": 3092,
                  "src": "90493:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3084,
                    "nodeType": "StructuredDocumentation",
                    "src": "90577:183:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. \n@dev Only the Governor or a LoanFactory Admin can call this function."
                  },
                  "functionSelector": "8456cb59",
                  "id": 3087,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3085,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90779:2:0"
                  },
                  "returnParameters": {
                    "id": 3086,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "90790:0:0"
                  },
                  "scope": 3092,
                  "src": "90765:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3088,
                    "nodeType": "StructuredDocumentation",
                    "src": "90797:188:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Governor or a LoanFactory Admin can call this function."
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 3091,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3089,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91006:2:0"
                  },
                  "returnParameters": {
                    "id": 3090,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91017:0:0"
                  },
                  "scope": 3092,
                  "src": "90990:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "85250:5771:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3094,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2006,
                    "src": "91329:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$2006",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 3095,
                  "nodeType": "InheritanceSpecifier",
                  "src": "91329:12:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3093,
                "nodeType": "StructuredDocumentation",
                "src": "91212:95:0",
                "text": "@title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers."
              },
              "fullyImplemented": false,
              "id": 3120,
              "linearizedBaseContracts": [
                3120,
                2006,
                141,
                77
              ],
              "name": "IPoolFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3096,
                    "nodeType": "StructuredDocumentation",
                    "src": "91349:62:0",
                    "text": "@dev The sum of all withdrawable interest."
                  },
                  "functionSelector": "71073bac",
                  "id": 3101,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestSum",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3097,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91436:2:0"
                  },
                  "returnParameters": {
                    "id": 3100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3099,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3101,
                        "src": "91462:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3098,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91462:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91461:9:0"
                  },
                  "scope": 3120,
                  "src": "91416:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3102,
                    "nodeType": "StructuredDocumentation",
                    "src": "91477:60:0",
                    "text": "@dev The sum of all unrecognized losses."
                  },
                  "functionSelector": "a33142f7",
                  "id": 3107,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3103,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91561:2:0"
                  },
                  "returnParameters": {
                    "id": 3106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3105,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3107,
                        "src": "91587:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3104,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91587:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91586:9:0"
                  },
                  "scope": 3120,
                  "src": "91542:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3108,
                    "nodeType": "StructuredDocumentation",
                    "src": "91602:98:0",
                    "text": "@dev The amount of earned interest present and accounted for in this contract."
                  },
                  "functionSelector": "9f3c7325",
                  "id": 3113,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "interestBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3109,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91729:2:0"
                  },
                  "returnParameters": {
                    "id": 3112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3111,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3113,
                        "src": "91755:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3110,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91755:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91754:9:0"
                  },
                  "scope": 3120,
                  "src": "91705:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3114,
                    "nodeType": "StructuredDocumentation",
                    "src": "91770:89:0",
                    "text": "@dev The amount of losses present and accounted for in this contract."
                  },
                  "functionSelector": "fec984e3",
                  "id": 3119,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3115,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "91886:2:0"
                  },
                  "returnParameters": {
                    "id": 3118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3117,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3119,
                        "src": "91912:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "91912:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "91911:9:0"
                  },
                  "scope": 3120,
                  "src": "91864:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "91307:617:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3122,
                    "name": "IPoolFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3120,
                    "src": "92282:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolFDT_$3120",
                      "typeString": "contract IPoolFDT"
                    }
                  },
                  "id": 3123,
                  "nodeType": "InheritanceSpecifier",
                  "src": "92282:8:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3124,
                    "name": "ExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2379,
                    "src": "92292:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ExtendedFDT_$2379",
                      "typeString": "contract ExtendedFDT"
                    }
                  },
                  "id": 3125,
                  "nodeType": "InheritanceSpecifier",
                  "src": "92292:11:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574,
                1946,
                2006,
                2379,
                3120
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 3121,
                "nodeType": "StructuredDocumentation",
                "src": "92158:95:0",
                "text": "@title PoolFDT inherits ExtendedFDT and accounts for gains/losses for Liquidity Providers."
              },
              "fullyImplemented": true,
              "id": 3230,
              "linearizedBaseContracts": [
                3230,
                2379,
                1946,
                1574,
                3120,
                2006,
                141,
                77,
                1076
              ],
              "name": "PoolFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 3128,
                  "libraryName": {
                    "contractScope": null,
                    "id": 3126,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "92317:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "92311:33:0",
                  "typeName": {
                    "id": 3127,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92336:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "baseFunctions": [
                    3101
                  ],
                  "constant": false,
                  "functionSelector": "71073bac",
                  "id": 3131,
                  "mutability": "mutable",
                  "name": "interestSum",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3130,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92365:8:0"
                  },
                  "scope": 3230,
                  "src": "92350:35:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92350:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3107
                  ],
                  "constant": false,
                  "functionSelector": "a33142f7",
                  "id": 3134,
                  "mutability": "mutable",
                  "name": "poolLosses",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3133,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92406:8:0"
                  },
                  "scope": 3230,
                  "src": "92391:34:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3132,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92391:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3113
                  ],
                  "constant": false,
                  "functionSelector": "9f3c7325",
                  "id": 3137,
                  "mutability": "mutable",
                  "name": "interestBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3136,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92447:8:0"
                  },
                  "scope": 3230,
                  "src": "92432:39:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3135,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92432:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3119
                  ],
                  "constant": false,
                  "functionSelector": "fec984e3",
                  "id": 3140,
                  "mutability": "mutable",
                  "name": "lossesBalance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 3139,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92492:8:0"
                  },
                  "scope": 3230,
                  "src": "92477:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3138,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "92477:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 3151,
                    "nodeType": "Block",
                    "src": "92608:3:0",
                    "statements": []
                  },
                  "documentation": null,
                  "id": 3152,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3147,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3142,
                          "src": "92587:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 3148,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3144,
                          "src": "92593:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 3149,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 3146,
                        "name": "ExtendedFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2379,
                        "src": "92575:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ExtendedFDT_$2379_$",
                          "typeString": "type(contract ExtendedFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "92575:25:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3142,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3152,
                        "src": "92533:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3141,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "92533:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3144,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3152,
                        "src": "92553:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3143,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "92553:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "92532:42:0"
                  },
                  "returnParameters": {
                    "id": 3150,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "92608:0:0"
                  },
                  "scope": 3230,
                  "src": "92521:90:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2371
                  ],
                  "body": {
                    "id": 3174,
                    "nodeType": "Block",
                    "src": "92750:129:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3159,
                            "name": "losses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3157,
                            "src": "92760:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3160,
                              "name": "_prepareLossesWithdraw",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2130,
                              "src": "92769:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                "typeString": "function () returns (uint256)"
                              }
                            },
                            "id": 3161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "92769:24:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "92760:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3163,
                        "nodeType": "ExpressionStatement",
                        "src": "92760:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3164,
                            "name": "poolLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3134,
                            "src": "92804:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3167,
                                "name": "losses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3157,
                                "src": "92832:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3165,
                                "name": "poolLosses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3134,
                                "src": "92817:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "92817:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 3168,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "92817:22:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "92804:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3170,
                        "nodeType": "ExpressionStatement",
                        "src": "92804:35:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 3171,
                            "name": "_updateLossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3202
                            ],
                            "referencedDeclaration": 3202,
                            "src": "92850:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 3172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "92850:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 3173,
                        "nodeType": "ExpressionStatement",
                        "src": "92850:22:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3153,
                    "nodeType": "StructuredDocumentation",
                    "src": "92617:57:0",
                    "text": "@dev Realizes losses incurred to LPs."
                  },
                  "id": 3175,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_recognizeLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3155,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "92716:8:0"
                  },
                  "parameters": {
                    "id": 3154,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "92704:2:0"
                  },
                  "returnParameters": {
                    "id": 3158,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3157,
                        "mutability": "mutable",
                        "name": "losses",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3175,
                        "src": "92734:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3156,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "92734:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "92733:16:0"
                  },
                  "scope": 3230,
                  "src": "92679:200:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2378
                  ],
                  "body": {
                    "id": 3201,
                    "nodeType": "Block",
                    "src": "93179:177:0",
                    "statements": [
                      {
                        "assignments": [
                          3183
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3183,
                            "mutability": "mutable",
                            "name": "_prevLossesTokenBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3201,
                            "src": "93189:31:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3182,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "93189:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3185,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 3184,
                          "name": "lossesBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3140,
                          "src": "93223:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "93189:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3188,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3186,
                            "name": "lossesBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3140,
                            "src": "93247:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3187,
                            "name": "poolLosses",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3134,
                            "src": "93263:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "93247:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3189,
                        "nodeType": "ExpressionStatement",
                        "src": "93247:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3197,
                                  "name": "_prevLossesTokenBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3183,
                                  "src": "93324:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93317:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3195,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93317:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3198,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93317:31:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3192,
                                  "name": "lossesBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3140,
                                  "src": "93298:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3191,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93291:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3190,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93291:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93291:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 3194,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "93291:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 3199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "93291:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3181,
                        "id": 3200,
                        "nodeType": "Return",
                        "src": "93284:65:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3176,
                    "nodeType": "StructuredDocumentation",
                    "src": "92885:222:0",
                    "text": "@dev    Updates the current losses balance and returns the difference of the new and previous losses balance.\n@return A int256 representing the difference of the new and previous losses balance."
                  },
                  "id": 3202,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateLossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3178,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "93153:8:0"
                  },
                  "parameters": {
                    "id": 3177,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "93141:2:0"
                  },
                  "returnParameters": {
                    "id": 3181,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3180,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3202,
                        "src": "93171:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3179,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "93171:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "93170:8:0"
                  },
                  "scope": 3230,
                  "src": "93112:244:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    1924
                  ],
                  "body": {
                    "id": 3228,
                    "nodeType": "Block",
                    "src": "93666:182:0",
                    "statements": [
                      {
                        "assignments": [
                          3210
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3210,
                            "mutability": "mutable",
                            "name": "_prevFundsTokenBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 3228,
                            "src": "93676:30:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 3209,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "93676:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3212,
                        "initialValue": {
                          "argumentTypes": null,
                          "id": 3211,
                          "name": "interestBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3137,
                          "src": "93709:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "93676:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3213,
                            "name": "interestBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3137,
                            "src": "93735:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3214,
                            "name": "interestSum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "93753:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "93735:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3216,
                        "nodeType": "ExpressionStatement",
                        "src": "93735:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3224,
                                  "name": "_prevFundsTokenBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3210,
                                  "src": "93817:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93810:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3222,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93810:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93810:30:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3219,
                                  "name": "interestBalance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3137,
                                  "src": "93789:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "93782:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 3217,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "93782:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 3220,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "93782:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 3221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1014,
                            "src": "93782:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 3226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "93782:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 3208,
                        "id": 3227,
                        "nodeType": "Return",
                        "src": "93775:66:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3203,
                    "nodeType": "StructuredDocumentation",
                    "src": "93362:228:0",
                    "text": "@dev    Updates the current interest balance and returns the difference of the new and previous interest balance.\n@return A int256 representing the difference of the new and previous interest balance."
                  },
                  "id": 3229,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateFundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3205,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "93640:8:0"
                  },
                  "parameters": {
                    "id": 3204,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "93628:2:0"
                  },
                  "returnParameters": {
                    "id": 3208,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3207,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3229,
                        "src": "93658:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 3206,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "93658:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "93657:8:0"
                  },
                  "scope": 3230,
                  "src": "93595:253:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "92253:1598:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3232,
                    "name": "IPoolFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3120,
                    "src": "94189:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolFDT_$3120",
                      "typeString": "contract IPoolFDT"
                    }
                  },
                  "id": 3233,
                  "nodeType": "InheritanceSpecifier",
                  "src": "94189:8:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006,
                3120
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3231,
                "nodeType": "StructuredDocumentation",
                "src": "94093:77:0",
                "text": "@title Pool maintains all accounting and functionality related to Pools."
              },
              "fullyImplemented": false,
              "id": 3697,
              "linearizedBaseContracts": [
                3697,
                3120,
                2006,
                141,
                77
              ],
              "name": "IPool",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "IPool.State",
                  "id": 3237,
                  "members": [
                    {
                      "id": 3234,
                      "name": "Initialized",
                      "nodeType": "EnumValue",
                      "src": "94455:11:0"
                    },
                    {
                      "id": 3235,
                      "name": "Finalized",
                      "nodeType": "EnumValue",
                      "src": "94468:9:0"
                    },
                    {
                      "id": 3236,
                      "name": "Deactivated",
                      "nodeType": "EnumValue",
                      "src": "94479:11:0"
                    }
                  ],
                  "name": "State",
                  "nodeType": "EnumDefinition",
                  "src": "94442:50:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3238,
                    "nodeType": "StructuredDocumentation",
                    "src": "94498:224:0",
                    "text": "@dev   Emits an event indicating a Loan was funded.\n@param loan         The funded Loan.\n@param debtLocker   The DebtLocker.\n@param amountFunded The amount the Loan was funded for."
                  },
                  "id": 3246,
                  "name": "LoanFunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3245,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3240,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3246,
                        "src": "94744:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3239,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "94744:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3242,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3246,
                        "src": "94766:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3241,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "94766:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3244,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amountFunded",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3246,
                        "src": "94786:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3243,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "94786:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "94743:64:0"
                  },
                  "src": "94727:81:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3247,
                    "nodeType": "StructuredDocumentation",
                    "src": "94814:418:0",
                    "text": "@dev   Emits an event indicating a Loan was claimed.\n@param loan                The Loan.\n@param interest            The interest.\n@param principal           The principal.\n@param fee                 The total fee.\n@param stakeLockerPortion  The portion of the fee for Stakers.\n@param poolDelegatePortion The portion of the fee for the Pool Delegate."
                  },
                  "id": 3261,
                  "name": "Claim",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3249,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95249:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "95249:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3251,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "interest",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95271:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3250,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95271:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3253,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "principal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95289:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3252,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95289:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3255,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "fee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95308:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3254,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95308:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3257,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLockerPortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95321:26:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3256,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95321:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3259,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "poolDelegatePortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3261,
                        "src": "95349:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3258,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95349:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "95248:129:0"
                  },
                  "src": "95237:141:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3262,
                    "nodeType": "StructuredDocumentation",
                    "src": "95384:334:0",
                    "text": "@dev   Emits an event indicating some Balance was updated.\n@param liquidityProvider The address of a Liquidity Provider.\n@param token             The address of the token for which the balance of `liquidityProvider` changed.\n@param balance           The new balance for `liquidityProvider`."
                  },
                  "id": 3270,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3269,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3264,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3270,
                        "src": "95744:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "95744:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3266,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3270,
                        "src": "95779:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3265,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "95779:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3268,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3270,
                        "src": "95802:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "95802:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "95743:75:0"
                  },
                  "src": "95723:96:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3271,
                    "nodeType": "StructuredDocumentation",
                    "src": "95825:343:0",
                    "text": "@dev   Emits an event indicating a transfer of funds was performed by a custodian.\n@param custodian The address of the custodian.\n@param from      The source of funds that were custodied.\n@param to        The destination of funds.\n@param amount    The amount of custodied tokens transferred."
                  },
                  "id": 3281,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3280,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3273,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96195:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3272,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96195:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3275,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96222:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3274,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96222:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3277,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96244:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3276,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96244:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3279,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3281,
                        "src": "96264:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3278,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "96264:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96194:85:0"
                  },
                  "src": "96173:107:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3282,
                    "nodeType": "StructuredDocumentation",
                    "src": "96286:488:0",
                    "text": "@dev   Emits an event indicating a change in the total amount in custodianship for an account.\n@param liquidityProvider The address of amount who's funds are being custodied.\n@param custodian         The address of the custodian.\n@param oldAllowance      The original total amount in custodian by `custodian` for `liquidityProvider`.\n@param newAllowance      The updated total amount in custodian by `custodian` for `liquidityProvider`."
                  },
                  "id": 3292,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3291,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3284,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96809:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3283,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96809:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3286,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96844:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3285,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "96844:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3288,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96871:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3287,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "96871:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3290,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3292,
                        "src": "96893:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3289,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "96893:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "96808:106:0"
                  },
                  "src": "96779:136:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3293,
                    "nodeType": "StructuredDocumentation",
                    "src": "96921:244:0",
                    "text": "@dev   Emits an event indicating a that a Liquidity Provider's status has changed.\n@param liquidityProvider The address of a Liquidity Provider.\n@param status            The new status of `liquidityProvider`."
                  },
                  "id": 3299,
                  "name": "LPStatusChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3298,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3295,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3299,
                        "src": "97192:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3294,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "97192:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3297,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3299,
                        "src": "97227:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3296,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "97227:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97191:48:0"
                  },
                  "src": "97170:70:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3300,
                    "nodeType": "StructuredDocumentation",
                    "src": "97246:153:0",
                    "text": "@dev   Emits an event indicating a that the Liquidity Cap for the Pool was set.\n@param newLiquidityCap The new liquidity cap."
                  },
                  "id": 3304,
                  "name": "LiquidityCapSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3303,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3302,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3304,
                        "src": "97426:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3301,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "97426:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97425:25:0"
                  },
                  "src": "97404:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3305,
                    "nodeType": "StructuredDocumentation",
                    "src": "97457:150:0",
                    "text": "@dev   Emits an event indicating a that the lockup period for the Pool was set.\n@param newLockupPeriod The new lockup cap."
                  },
                  "id": 3309,
                  "name": "LockupPeriodSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3308,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3307,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3309,
                        "src": "97634:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3306,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "97634:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97633:25:0"
                  },
                  "src": "97612:47:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3310,
                    "nodeType": "StructuredDocumentation",
                    "src": "97665:170:0",
                    "text": "@dev   Emits an event indicating a that the staking fee for the Pool was set.\n@param newStakingFee The new fee Stakers earn (in basis points)."
                  },
                  "id": 3314,
                  "name": "StakingFeeSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3312,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3314,
                        "src": "97860:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3311,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "97860:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "97859:23:0"
                  },
                  "src": "97840:43:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3315,
                    "nodeType": "StructuredDocumentation",
                    "src": "97889:142:0",
                    "text": "@dev   Emits an event indicating a that the state of the Pool has changed.\n@param state The new state of the Pool."
                  },
                  "id": 3319,
                  "name": "PoolStateChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3317,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "state",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3319,
                        "src": "98059:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$3237",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3316,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3237,
                          "src": "98059:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98058:13:0"
                  },
                  "src": "98036:36:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3320,
                    "nodeType": "StructuredDocumentation",
                    "src": "98078:265:0",
                    "text": "@dev   Emits an event indicating a that the withdrawal cooldown for a Liquidity Provider of the Pool has updated.\n@param liquidityProvider The address of a Liquidity Provider.\n@param cooldown          The new withdrawal cooldown."
                  },
                  "id": 3326,
                  "name": "Cooldown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3325,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3322,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3326,
                        "src": "98363:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3321,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "98363:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3324,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "cooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3326,
                        "src": "98398:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3323,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "98398:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98362:53:0"
                  },
                  "src": "98348:68:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3327,
                    "nodeType": "StructuredDocumentation",
                    "src": "98422:183:0",
                    "text": "@dev   Emits an event indicating a that a Pool's openness to the public has changed.\n@param isOpen Whether the Pool is open to the public to add liquidity."
                  },
                  "id": 3331,
                  "name": "PoolOpenedToPublic",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3330,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3329,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "isOpen",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3331,
                        "src": "98635:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3328,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "98635:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98634:13:0"
                  },
                  "src": "98610:38:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3332,
                    "nodeType": "StructuredDocumentation",
                    "src": "98654:203:0",
                    "text": "@dev   Emits an event indicating a that a PoolAdmin was set.\n@param poolAdmin The address of a PoolAdmin.\n@param allowed   Whether `poolAdmin` is an admin of the Pool."
                  },
                  "id": 3338,
                  "name": "PoolAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3337,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3334,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3338,
                        "src": "98881:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "98881:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3336,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3338,
                        "src": "98908:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3335,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "98908:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "98880:41:0"
                  },
                  "src": "98862:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3339,
                    "nodeType": "StructuredDocumentation",
                    "src": "98928:253:0",
                    "text": "@dev   Emits an event indicating a that a Liquidity Provider's effective deposit date has changed.\n@param liquidityProvider The address of a Liquidity Provider.\n@param depositDate       The new effective deposit date."
                  },
                  "id": 3345,
                  "name": "DepositDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3344,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3341,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3345,
                        "src": "99211:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3340,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99211:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3343,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "depositDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3345,
                        "src": "99246:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "99246:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "99210:56:0"
                  },
                  "src": "99186:81:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3346,
                    "nodeType": "StructuredDocumentation",
                    "src": "99273:303:0",
                    "text": "@dev   Emits an event indicating a that a Liquidity Provider's total amount in custody of custodians has changed.\n@param liquidityProvider The address of a Liquidity Provider.\n@param newTotalAllowance The total amount in custody of custodians for `liquidityProvider`."
                  },
                  "id": 3352,
                  "name": "TotalCustodyAllowanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3348,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3352,
                        "src": "99616:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3347,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "99616:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3350,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3352,
                        "src": "99651:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3349,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "99651:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "99615:62:0"
                  },
                  "src": "99581:97:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3353,
                    "nodeType": "StructuredDocumentation",
                    "src": "99684:552:0",
                    "text": "@dev   Emits an event indicating the one of the Pool's Loans defaulted.\n@param loan                            The address of the Loan that defaulted.\n@param defaultSuffered                 The amount of default suffered.\n@param bptsBurned                      The amount of BPTs burned to recover funds.\n@param bptsReturned                    The amount of BPTs returned to Liquidity Provider.\n@param liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burning BPTs."
                  },
                  "id": 3365,
                  "name": "DefaultSuffered",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3364,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3355,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100272:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3354,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "100272:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3357,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100302:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3356,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100302:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3359,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100335:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3358,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100335:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3361,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "bptsReturned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100363:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3360,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100363:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3363,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAssetRecoveredFromBurn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3365,
                        "src": "100393:39:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3362,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "100393:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100262:176:0"
                  },
                  "src": "100241:198:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3366,
                    "nodeType": "StructuredDocumentation",
                    "src": "100445:65:0",
                    "text": "@dev The factory type of `DebtLockerFactory`."
                  },
                  "functionSelector": "174a5be4",
                  "id": 3371,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "DL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3367,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100534:2:0"
                  },
                  "returnParameters": {
                    "id": 3370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3369,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3371,
                        "src": "100560:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3368,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "100560:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100559:7:0"
                  },
                  "scope": 3697,
                  "src": "100515:52:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3372,
                    "nodeType": "StructuredDocumentation",
                    "src": "100573:100:0",
                    "text": "@dev The asset deposited by Lenders into the LiquidityLocker, for funding Loans."
                  },
                  "functionSelector": "209b2bca",
                  "id": 3377,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3373,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100701:2:0"
                  },
                  "returnParameters": {
                    "id": 3376,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3375,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3377,
                        "src": "100727:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3374,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "100727:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100726:8:0"
                  },
                  "scope": 3697,
                  "src": "100678:57:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3378,
                    "nodeType": "StructuredDocumentation",
                    "src": "100741:91:0",
                    "text": "@dev The Pool Delegate address, maintains full authority over the Pool."
                  },
                  "functionSelector": "4046af2b",
                  "id": 3383,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3379,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "100858:2:0"
                  },
                  "returnParameters": {
                    "id": 3382,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3381,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3383,
                        "src": "100884:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3380,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "100884:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "100883:9:0"
                  },
                  "scope": 3697,
                  "src": "100837:56:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3384,
                    "nodeType": "StructuredDocumentation",
                    "src": "100899:138:0",
                    "text": "@dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events."
                  },
                  "functionSelector": "9759164a",
                  "id": 3389,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3385,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101066:2:0"
                  },
                  "returnParameters": {
                    "id": 3388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3387,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3389,
                        "src": "101092:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3386,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101092:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101091:9:0"
                  },
                  "scope": 3697,
                  "src": "101042:59:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3390,
                    "nodeType": "StructuredDocumentation",
                    "src": "101107:138:0",
                    "text": "@dev The address of the asset deposited by Stakers into the StakeLocker (BPTs), for liquidation during default events."
                  },
                  "functionSelector": "80cd916d",
                  "id": 3395,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3391,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101269:2:0"
                  },
                  "returnParameters": {
                    "id": 3394,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3393,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3395,
                        "src": "101295:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3392,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101295:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101294:9:0"
                  },
                  "scope": 3697,
                  "src": "101250:54:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3396,
                    "nodeType": "StructuredDocumentation",
                    "src": "101310:80:0",
                    "text": "@dev The address of the StakeLocker, escrowing `stakeAsset`."
                  },
                  "functionSelector": "033b1cf0",
                  "id": 3401,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3397,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101415:2:0"
                  },
                  "returnParameters": {
                    "id": 3400,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3399,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3401,
                        "src": "101441:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3398,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101441:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101440:9:0"
                  },
                  "scope": 3697,
                  "src": "101395:55:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3402,
                    "nodeType": "StructuredDocumentation",
                    "src": "101456:61:0",
                    "text": "@dev The factory that deployed this Loan."
                  },
                  "functionSelector": "0d49b38c",
                  "id": 3407,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "superFactory",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3403,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101543:2:0"
                  },
                  "returnParameters": {
                    "id": 3406,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3405,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3407,
                        "src": "101569:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3404,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "101569:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101568:9:0"
                  },
                  "scope": 3697,
                  "src": "101522:56:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3408,
                    "nodeType": "StructuredDocumentation",
                    "src": "101584:64:0",
                    "text": "@dev The fee Stakers earn (in basis points)."
                  },
                  "functionSelector": "eff98843",
                  "id": 3413,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3409,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101672:2:0"
                  },
                  "returnParameters": {
                    "id": 3412,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3411,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3413,
                        "src": "101698:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3410,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "101698:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101697:9:0"
                  },
                  "scope": 3697,
                  "src": "101653:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3414,
                    "nodeType": "StructuredDocumentation",
                    "src": "101713:75:0",
                    "text": "@dev The fee the Pool Delegate earns (in basis points)."
                  },
                  "functionSelector": "b69410de",
                  "id": 3419,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "delegateFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3415,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101813:2:0"
                  },
                  "returnParameters": {
                    "id": 3418,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3417,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3419,
                        "src": "101839:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3416,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "101839:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101838:9:0"
                  },
                  "scope": 3697,
                  "src": "101793:55:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3420,
                    "nodeType": "StructuredDocumentation",
                    "src": "101854:71:0",
                    "text": "@dev The sum of all outstanding principal on Loans."
                  },
                  "functionSelector": "ac641655",
                  "id": 3425,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "principalOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3421,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "101951:2:0"
                  },
                  "returnParameters": {
                    "id": 3424,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3423,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3425,
                        "src": "101977:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3422,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "101977:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "101976:9:0"
                  },
                  "scope": 3697,
                  "src": "101930:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3426,
                    "nodeType": "StructuredDocumentation",
                    "src": "101992:77:0",
                    "text": "@dev The amount of liquidity tokens accepted by the Pool."
                  },
                  "functionSelector": "76687d3d",
                  "id": 3431,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3427,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102095:2:0"
                  },
                  "returnParameters": {
                    "id": 3430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3429,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3431,
                        "src": "102121:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3428,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "102121:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102120:9:0"
                  },
                  "scope": 3697,
                  "src": "102074:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3432,
                    "nodeType": "StructuredDocumentation",
                    "src": "102136:119:0",
                    "text": "@dev The period of time from an account's deposit date during which they cannot withdraw any funds."
                  },
                  "functionSelector": "ee947a7c",
                  "id": 3437,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3433,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102281:2:0"
                  },
                  "returnParameters": {
                    "id": 3436,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3435,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3437,
                        "src": "102307:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3434,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "102307:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102306:9:0"
                  },
                  "scope": 3697,
                  "src": "102260:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3438,
                    "nodeType": "StructuredDocumentation",
                    "src": "102322:80:0",
                    "text": "@dev Whether the Pool is open to the public for LP deposits."
                  },
                  "functionSelector": "1831ccf2",
                  "id": 3443,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3439,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102428:2:0"
                  },
                  "returnParameters": {
                    "id": 3442,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3441,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3443,
                        "src": "102454:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3440,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "102454:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102453:6:0"
                  },
                  "scope": 3697,
                  "src": "102407:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3444,
                    "nodeType": "StructuredDocumentation",
                    "src": "102466:47:0",
                    "text": "@dev The state of the Pool."
                  },
                  "functionSelector": "641ad8a9",
                  "id": 3449,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolState",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3445,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "102536:2:0"
                  },
                  "returnParameters": {
                    "id": 3448,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3447,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3449,
                        "src": "102562:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$3237",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3446,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3237,
                          "src": "102562:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102561:7:0"
                  },
                  "scope": 3697,
                  "src": "102518:51:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3450,
                    "nodeType": "StructuredDocumentation",
                    "src": "102575:203:0",
                    "text": "@dev    Used for withdraw penalty calculation.\n@param  account The address of an account.\n@return The unix timestamp of the weighted average deposit date of `account`."
                  },
                  "functionSelector": "24b92e8e",
                  "id": 3457,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "depositDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3453,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3452,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3457,
                        "src": "102804:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3451,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "102804:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102803:17:0"
                  },
                  "returnParameters": {
                    "id": 3456,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3455,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3457,
                        "src": "102844:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3454,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "102844:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "102843:9:0"
                  },
                  "scope": 3697,
                  "src": "102783:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3458,
                    "nodeType": "StructuredDocumentation",
                    "src": "102859:233:0",
                    "text": "@param  loan              The address of a Loan.\n@param  debtLockerFactory The address of a DebtLockerFactory.\n@return The address of the DebtLocker corresponding to `loan` and `debtLockerFactory`."
                  },
                  "functionSelector": "d7bd3c91",
                  "id": 3467,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "debtLockers",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3463,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3460,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "103118:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3459,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103118:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3462,
                        "mutability": "mutable",
                        "name": "debtLockerFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "103132:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3461,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103132:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103117:41:0"
                  },
                  "returnParameters": {
                    "id": 3466,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3465,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3467,
                        "src": "103182:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3464,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103182:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103181:9:0"
                  },
                  "scope": 3697,
                  "src": "103097:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3468,
                    "nodeType": "StructuredDocumentation",
                    "src": "103197:173:0",
                    "text": "@param  poolAdmin The address of a PoolAdmin.\n@return Whether `poolAdmin` has permission to do certain operations in case of disaster management."
                  },
                  "functionSelector": "613384f2",
                  "id": 3475,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3471,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3470,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3475,
                        "src": "103395:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3469,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103395:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103394:19:0"
                  },
                  "returnParameters": {
                    "id": 3474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3473,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3475,
                        "src": "103437:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3472,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "103437:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103436:6:0"
                  },
                  "scope": 3697,
                  "src": "103375:68:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3476,
                    "nodeType": "StructuredDocumentation",
                    "src": "103449:155:0",
                    "text": "@param  liquidityProvider The address of a LiquidityProvider.\n@return Whether `liquidityProvider` has early access to the Pool."
                  },
                  "functionSelector": "c59e3959",
                  "id": 3483,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowedLiquidityProviders",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3479,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3478,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3483,
                        "src": "103644:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3477,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103644:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103643:27:0"
                  },
                  "returnParameters": {
                    "id": 3482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3481,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3483,
                        "src": "103694:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3480,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "103694:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103693:6:0"
                  },
                  "scope": 3697,
                  "src": "103609:91:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3484,
                    "nodeType": "StructuredDocumentation",
                    "src": "103706:182:0",
                    "text": "@param  liquidityProvider The address of a LiquidityProvider.\n@return The unix timestamp of when individual LPs have notified of their intent to withdraw."
                  },
                  "functionSelector": "d82745c8",
                  "id": 3491,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawCooldown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3487,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3486,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3491,
                        "src": "103919:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3485,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "103919:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103918:27:0"
                  },
                  "returnParameters": {
                    "id": 3490,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3489,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3491,
                        "src": "103969:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3488,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "103969:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "103968:9:0"
                  },
                  "scope": 3697,
                  "src": "103893:85:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3492,
                    "nodeType": "StructuredDocumentation",
                    "src": "103984:204:0",
                    "text": "@param  account   The address of an account.\n@param  custodian The address of a custodian.\n@return The amount of PoolFDTs of `account` that are \"locked\" at `custodian`."
                  },
                  "functionSelector": "c965b548",
                  "id": 3501,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3497,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3494,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3501,
                        "src": "104219:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3493,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "104219:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3496,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3501,
                        "src": "104236:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3495,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "104236:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104218:36:0"
                  },
                  "returnParameters": {
                    "id": 3500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3499,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3501,
                        "src": "104278:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3498,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "104278:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104277:9:0"
                  },
                  "scope": 3697,
                  "src": "104193:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3502,
                    "nodeType": "StructuredDocumentation",
                    "src": "104293:188:0",
                    "text": "@param  account   The address of an account.\n@return The total amount of PoolFDTs that are \"locked\" for `account`. Cannot be greater than the account's balance."
                  },
                  "functionSelector": "af6d5571",
                  "id": 3509,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3504,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3509,
                        "src": "104517:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3503,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "104517:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104516:17:0"
                  },
                  "returnParameters": {
                    "id": 3508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3507,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3509,
                        "src": "104557:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3506,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "104557:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "104556:9:0"
                  },
                  "scope": 3697,
                  "src": "104486:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3510,
                    "nodeType": "StructuredDocumentation",
                    "src": "104572:256:0",
                    "text": "@dev Finalizes the Pool, enabling deposits. \n@dev Checks the amount the Pool Delegate deposited to the StakeLocker. \n@dev Only the Pool Delegate can call this function. \n@dev It emits a `PoolStateChanged` event. "
                  },
                  "functionSelector": "4bb278f3",
                  "id": 3513,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "finalize",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3511,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "104850:2:0"
                  },
                  "returnParameters": {
                    "id": 3512,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "104861:0:0"
                  },
                  "scope": 3697,
                  "src": "104833:29:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3514,
                    "nodeType": "StructuredDocumentation",
                    "src": "104868:460:0",
                    "text": "@dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `LoanFunded` event. \n@dev   It emits a `BalanceUpdated` event. \n@param loan      The address of the Loan to fund.\n@param dlFactory The address of the DebtLockerFactory to utilize.\n@param amt       The amount to fund the Loan."
                  },
                  "functionSelector": "1aa37cec",
                  "id": 3523,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3516,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3523,
                        "src": "105351:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3515,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105351:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3518,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3523,
                        "src": "105365:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3517,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105365:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3520,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3523,
                        "src": "105384:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3519,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "105384:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "105350:46:0"
                  },
                  "returnParameters": {
                    "id": 3522,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "105405:0:0"
                  },
                  "scope": 3697,
                  "src": "105333:73:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3524,
                    "nodeType": "StructuredDocumentation",
                    "src": "105412:516:0",
                    "text": "@dev   Liquidates a Loan. \n@dev   The Pool Delegate could liquidate the Loan only when the Loan completes its grace period. \n@dev   The Pool Delegate can claim its proportion of recovered funds from the liquidation using the `claim()` function. \n@dev   Only the Pool Delegate can call this function. \n@param loan      The address of the Loan to liquidate.\n@param dlFactory The address of the DebtLockerFactory that is used to pull corresponding DebtLocker."
                  },
                  "functionSelector": "40504ba0",
                  "id": 3531,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3529,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3526,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3531,
                        "src": "105957:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3525,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105957:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3528,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3531,
                        "src": "105971:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3527,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "105971:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "105956:33:0"
                  },
                  "returnParameters": {
                    "id": 3530,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "105998:0:0"
                  },
                  "scope": 3697,
                  "src": "105933:66:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3532,
                    "nodeType": "StructuredDocumentation",
                    "src": "106005:837:0",
                    "text": "@dev    Claims available funds for the Loan through a specified DebtLockerFactory. \n@dev    Only the Pool Delegate or a Pool Admin can call this function. \n@dev    It emits two `BalanceUpdated` events. \n@dev    It emits a `Claim` event. \n@param  loan      The address of the loan to claim from.\n@param  dlFactory The address of the DebtLockerFactory.\n@return claimInfo The claim details. \n[0] => Total amount claimed, \n[1] => Interest portion claimed, \n[2] => Principal portion claimed, \n[3] => Fee portion claimed, \n[4] => Excess portion claimed, \n[5] => Recovered portion claimed (from liquidations), \n[6] => Default suffered. "
                  },
                  "functionSelector": "21c0b342",
                  "id": 3543,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "claim",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3537,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3534,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3543,
                        "src": "106862:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3533,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "106862:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3536,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3543,
                        "src": "106876:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3535,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "106876:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106861:33:0"
                  },
                  "returnParameters": {
                    "id": 3542,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3541,
                        "mutability": "mutable",
                        "name": "claimInfo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3543,
                        "src": "106913:27:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3538,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "106913:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3540,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 3539,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "106921:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "106913:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "106912:29:0"
                  },
                  "scope": 3697,
                  "src": "106847:95:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3544,
                    "nodeType": "StructuredDocumentation",
                    "src": "106948:279:0",
                    "text": "@dev Triggers deactivation, permanently shutting down the Pool. \n@dev Must have less than 100 USD worth of Liquidity Asset `principalOut`. \n@dev Only the Pool Delegate can call this function. \n@dev It emits a `PoolStateChanged` event. "
                  },
                  "functionSelector": "51b42b00",
                  "id": 3547,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deactivate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3545,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107251:2:0"
                  },
                  "returnParameters": {
                    "id": 3546,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107262:0:0"
                  },
                  "scope": 3697,
                  "src": "107232:31:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3548,
                    "nodeType": "StructuredDocumentation",
                    "src": "107273:242:0",
                    "text": "@dev   Sets the liquidity cap. \n@dev   Only the Pool Delegate or a Pool Admin can call this function. \n@dev   It emits a `LiquidityCapSet` event. \n@param newLiquidityCap The new liquidity cap value."
                  },
                  "functionSelector": "7b99adb1",
                  "id": 3553,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3551,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3550,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3553,
                        "src": "107545:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3549,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "107545:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "107544:25:0"
                  },
                  "returnParameters": {
                    "id": 3552,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107578:0:0"
                  },
                  "scope": 3697,
                  "src": "107520:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3554,
                    "nodeType": "StructuredDocumentation",
                    "src": "107585:253:0",
                    "text": "@dev   Sets the lockup period. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `LockupPeriodSet` event. \n@param newLockupPeriod The new lockup period used to restrict the withdrawals."
                  },
                  "functionSelector": "c771c390",
                  "id": 3559,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3556,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3559,
                        "src": "107868:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "107868:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "107867:25:0"
                  },
                  "returnParameters": {
                    "id": 3558,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "107901:0:0"
                  },
                  "scope": 3697,
                  "src": "107843:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3560,
                    "nodeType": "StructuredDocumentation",
                    "src": "107908:212:0",
                    "text": "@dev   Sets the staking fee. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `StakingFeeSet` event. \n@param newStakingFee The new staking fee."
                  },
                  "functionSelector": "410dbf7e",
                  "id": 3565,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3563,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3562,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3565,
                        "src": "108148:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3561,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "108148:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108147:23:0"
                  },
                  "returnParameters": {
                    "id": 3564,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108179:0:0"
                  },
                  "scope": 3697,
                  "src": "108125:55:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3566,
                    "nodeType": "StructuredDocumentation",
                    "src": "108186:312:0",
                    "text": "@dev   Sets the account status in the Pool's allowlist. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits an `LPStatusChanged` event. \n@param account The address to set status for.\n@param status  The status of an account in the allowlist."
                  },
                  "functionSelector": "7666f125",
                  "id": 3573,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowList",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3568,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3573,
                        "src": "108525:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3567,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108525:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3570,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3573,
                        "src": "108542:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3569,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "108542:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108524:30:0"
                  },
                  "returnParameters": {
                    "id": 3572,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108563:0:0"
                  },
                  "scope": 3697,
                  "src": "108503:61:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3574,
                    "nodeType": "StructuredDocumentation",
                    "src": "108570:309:0",
                    "text": "@dev   Sets a Pool Admin. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `PoolAdminSet` event. \n@param poolAdmin An address being allowed or disallowed as a Pool Admin.\n@param allowed   Whether `poolAdmin` is an admin of the Pool."
                  },
                  "functionSelector": "9185192a",
                  "id": 3581,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3579,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3576,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3581,
                        "src": "108906:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3575,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "108906:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3578,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3581,
                        "src": "108925:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3577,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "108925:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "108905:33:0"
                  },
                  "returnParameters": {
                    "id": 3580,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "108947:0:0"
                  },
                  "scope": 3697,
                  "src": "108884:64:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3582,
                    "nodeType": "StructuredDocumentation",
                    "src": "108954:265:0",
                    "text": "@dev   Sets whether the Pool is open to the public. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `PoolOpenedToPublic` event. \n@param open Whether the Pool is open to liquidity from the public."
                  },
                  "functionSelector": "a43baa3d",
                  "id": 3587,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setOpenToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3585,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3584,
                        "mutability": "mutable",
                        "name": "open",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3587,
                        "src": "109249:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3583,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "109249:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109248:11:0"
                  },
                  "returnParameters": {
                    "id": 3586,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109268:0:0"
                  },
                  "scope": 3697,
                  "src": "109224:45:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3588,
                    "nodeType": "StructuredDocumentation",
                    "src": "109275:341:0",
                    "text": "@dev   Handles Liquidity Providers depositing of Liquidity Asset into the LiquidityLocker, minting PoolFDTs. \n@dev   It emits a `DepositDateUpdated` event. \n@dev   It emits a `BalanceUpdated` event. \n@dev   It emits a `Cooldown` event. \n@param amt The amount of Liquidity Asset to deposit."
                  },
                  "functionSelector": "b6b55f25",
                  "id": 3593,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3591,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3590,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3593,
                        "src": "109638:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3589,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "109638:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "109637:13:0"
                  },
                  "returnParameters": {
                    "id": 3592,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109659:0:0"
                  },
                  "scope": 3697,
                  "src": "109621:39:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3594,
                    "nodeType": "StructuredDocumentation",
                    "src": "109666:187:0",
                    "text": "@dev Activates the cooldown period to withdraw. \n@dev It can't be called if the account is not providing liquidity. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "73ef9a50",
                  "id": 3597,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3595,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109883:2:0"
                  },
                  "returnParameters": {
                    "id": 3596,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "109894:0:0"
                  },
                  "scope": 3697,
                  "src": "109858:37:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3598,
                    "nodeType": "StructuredDocumentation",
                    "src": "109901:146:0",
                    "text": "@dev Cancels an initiated withdrawal by resetting the account's withdraw cooldown. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "84b76824",
                  "id": 3601,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3599,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110075:2:0"
                  },
                  "returnParameters": {
                    "id": 3600,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110086:0:0"
                  },
                  "scope": 3697,
                  "src": "110052:35:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3602,
                    "nodeType": "StructuredDocumentation",
                    "src": "110093:245:0",
                    "text": "@dev   Handles Liquidity Providers withdrawing of Liquidity Asset from the LiquidityLocker, burning PoolFDTs. \n@dev   It emits two `BalanceUpdated` event. \n@param amt The amount of Liquidity Asset to withdraw."
                  },
                  "functionSelector": "2e1a7d4d",
                  "id": 3607,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3604,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3607,
                        "src": "110361:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3603,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "110361:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "110360:13:0"
                  },
                  "returnParameters": {
                    "id": 3606,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110382:0:0"
                  },
                  "scope": 3697,
                  "src": "110343:40:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 3608,
                    "nodeType": "StructuredDocumentation",
                    "src": "110389:179:0",
                    "text": "@dev Withdraws all claimable interest from the LiquidityLocker for an account using `interestSum` accounting. \n@dev It emits a `BalanceUpdated` event. "
                  },
                  "functionSelector": "24600fc3",
                  "id": 3612,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 3610,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "110607:8:0"
                  },
                  "parameters": {
                    "id": 3609,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110595:2:0"
                  },
                  "returnParameters": {
                    "id": 3611,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "110615:0:0"
                  },
                  "scope": 3697,
                  "src": "110573:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3613,
                    "nodeType": "StructuredDocumentation",
                    "src": "110622:447:0",
                    "text": "@dev   Increases the custody allowance for a given Custodian corresponding to the calling account (`msg.sender`). \n@dev   It emits a `CustodyAllowanceChanged` event. \n@dev   It emits a `TotalCustodyAllowanceUpdated` event. \n@param custodian The address which will act as Custodian of a given amount for an account.\n@param amount    The number of additional FDTs to be custodied by the Custodian."
                  },
                  "functionSelector": "27f91856",
                  "id": 3620,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3618,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3615,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3620,
                        "src": "111108:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3614,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "111108:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3617,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3620,
                        "src": "111127:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3616,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "111127:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "111107:35:0"
                  },
                  "returnParameters": {
                    "id": 3619,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "111151:0:0"
                  },
                  "scope": 3697,
                  "src": "111074:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3621,
                    "nodeType": "StructuredDocumentation",
                    "src": "111158:665:0",
                    "text": "@dev   Transfers custodied PoolFDTs back to the account. \n@dev   `from` and `to` should always be equal in this implementation. \n@dev   This means that the Custodian can only decrease their own allowance and unlock funds for the original owner. \n@dev   It emits a `CustodyTransfer` event. \n@dev   It emits a `CustodyAllowanceChanged` event. \n@dev   It emits a `TotalCustodyAllowanceUpdated` event. \n@param from   The address which holds the PoolFDTs.\n@param to     The address which will be the new owner of the amount of PoolFDTs.\n@param amount The amount of PoolFDTs transferred."
                  },
                  "functionSelector": "2ac04ac8",
                  "id": 3630,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3628,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3623,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3630,
                        "src": "111857:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3622,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "111857:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3625,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3630,
                        "src": "111871:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3624,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "111871:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3627,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3630,
                        "src": "111883:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3626,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "111883:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "111856:42:0"
                  },
                  "returnParameters": {
                    "id": 3629,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "111907:0:0"
                  },
                  "scope": 3697,
                  "src": "111828:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3631,
                    "nodeType": "StructuredDocumentation",
                    "src": "111914: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": 3636,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3633,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3636,
                        "src": "112133:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3632,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112133:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "112132:15:0"
                  },
                  "returnParameters": {
                    "id": 3635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "112156:0:0"
                  },
                  "scope": 3697,
                  "src": "112111:46:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3637,
                    "nodeType": "StructuredDocumentation",
                    "src": "112167:419:0",
                    "text": "@dev    Calculates the value of BPT in units of Liquidity Asset.\n@param  _bPool          The address of Balancer pool.\n@param  _liquidityAsset The asset used by Pool for liquidity to fund Loans.\n@param  _staker         The address that deposited BPTs to StakeLocker.\n@param  _stakeLocker    Escrows BPTs deposited by Staker.\n@return USDC value of staker BPTs."
                  },
                  "functionSelector": "681cb10a",
                  "id": 3650,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BPTVal",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3646,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3639,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112616:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3638,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112616:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3641,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112640:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3640,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112640:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3643,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112673:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3642,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112673:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3645,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112698:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3644,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "112698:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "112606:118:0"
                  },
                  "returnParameters": {
                    "id": 3649,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3648,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3650,
                        "src": "112748:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3647,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "112748:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "112747:9:0"
                  },
                  "scope": 3697,
                  "src": "112591:166:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3651,
                    "nodeType": "StructuredDocumentation",
                    "src": "112763:215:0",
                    "text": "@dev   Checks that the given deposit amount is acceptable based on current liquidityCap.\n@param depositAmt The amount of tokens (i.e liquidityAsset type) the account is trying to deposit."
                  },
                  "functionSelector": "80e7ce85",
                  "id": 3658,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isDepositAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3654,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3653,
                        "mutability": "mutable",
                        "name": "depositAmt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3658,
                        "src": "113009:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3652,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113009:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113008:20:0"
                  },
                  "returnParameters": {
                    "id": 3657,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3656,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3658,
                        "src": "113052:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3655,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "113052:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113051:6:0"
                  },
                  "scope": 3697,
                  "src": "112983:75:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3659,
                    "nodeType": "StructuredDocumentation",
                    "src": "113064:458:0",
                    "text": "@dev    Returns information on the stake requirements.\n@return The min amount of Liquidity Asset coverage from staking required.\n@return The present amount of Liquidity Asset coverage from the Pool Delegate stake.\n@return Whether enough stake is present from the Pool Delegate for finalization.\n@return The staked BPTs required for minimum Liquidity Asset coverage.\n@return The current staked BPTs."
                  },
                  "functionSelector": "13bf9e7e",
                  "id": 3672,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInitialStakeRequirements",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3660,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "113563:2:0"
                  },
                  "returnParameters": {
                    "id": 3671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3662,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113589:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3661,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113589:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3664,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113598:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3663,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113598:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3666,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113607:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3665,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "113607:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3668,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113613:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3667,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113613:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3670,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3672,
                        "src": "113622:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3669,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "113622:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "113588:42:0"
                  },
                  "scope": 3697,
                  "src": "113527:104:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3673,
                    "nodeType": "StructuredDocumentation",
                    "src": "113637:692:0",
                    "text": "@dev    Calculates BPTs required if burning BPTs for the Liquidity Asset, given supplied `tokenAmountOutRequired`.\n@param  _bPool                        The Balancer pool that issues the BPTs.\n@param  _liquidityAsset               Swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  _staker                       The address that deposited BPTs to StakeLocker.\n@param  _stakeLocker                  Escrows BPTs deposited by Staker.\n@param  _liquidityAssetAmountRequired The amount of Liquidity Asset required to recover.\n@return The `poolAmountIn` required.\n@return The `poolAmountIn` currently staked."
                  },
                  "functionSelector": "c3746825",
                  "id": 3690,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolSharesRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3684,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3675,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114374:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114374:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3677,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114398:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3676,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114398:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3679,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114431:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3678,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114431:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3681,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114456:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3680,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "114456:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3683,
                        "mutability": "mutable",
                        "name": "_liquidityAssetAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114486:37:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3682,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "114486:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "114364:165:0"
                  },
                  "returnParameters": {
                    "id": 3689,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3686,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114553:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3685,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "114553:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3688,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3690,
                        "src": "114562:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3687,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "114562:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "114552:18:0"
                  },
                  "scope": 3697,
                  "src": "114334:237:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3691,
                    "nodeType": "StructuredDocumentation",
                    "src": "114577:124:0",
                    "text": "@dev    Checks that the Pool state is `Finalized`.\n@return Whether the Pool is in a Finalized state."
                  },
                  "functionSelector": "4f85221a",
                  "id": 3696,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPoolFinalized",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3692,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "114730:2:0"
                  },
                  "returnParameters": {
                    "id": 3695,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3694,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3696,
                        "src": "114756:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3693,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "114756:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "114755:6:0"
                  },
                  "scope": 3697,
                  "src": "114706:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "94170:20595:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 3698,
                "nodeType": "StructuredDocumentation",
                "src": "114945:43:0",
                "text": "@title PoolFactory instantiates Pools."
              },
              "fullyImplemented": false,
              "id": 3821,
              "linearizedBaseContracts": [
                3821
              ],
              "name": "IPoolFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3699,
                    "nodeType": "StructuredDocumentation",
                    "src": "115018:253:0",
                    "text": "@dev   Emits an event indicating a PoolFactoryAdmin was allowed.\n@param poolFactoryAdmin The address of a PoolFactoryAdmin.\n@param allowed          Whether `poolFactoryAdmin` is allowed as an admin of the PoolFactory."
                  },
                  "id": 3705,
                  "name": "PoolFactoryAdminSet",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3704,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3701,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3705,
                        "src": "115302:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3700,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "115302:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3703,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3705,
                        "src": "115336:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3702,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "115336:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "115301:48:0"
                  },
                  "src": "115276:74:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3706,
                    "nodeType": "StructuredDocumentation",
                    "src": "115356:781:0",
                    "text": "@dev   Emits an event indicating a Pool was created.\n@param pool             The address of the Pool.\n@param delegate         The PoolDelegate.\n@param liquidityAsset   The asset Loans will be funded in.\n@param stakeAsset       The asset stake will be locked in.\n@param liquidityLocker  The address of the LiquidityLocker.\n@param stakeLocker      The address of the StakeLocker.\n@param stakingFee       The fee paid to stakers on Loans.\n@param stakingFee       The fee paid to the Pool Delegate on Loans.\n@param liquidityCap     The maximum liquidity the Pool will hold.\n@param name             The name of the Pool FDTs.\n@param symbol           The symbol of the Pool FDTs."
                  },
                  "id": 3730,
                  "name": "PoolCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3729,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3708,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116169:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3707,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116169:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3710,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "delegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116199:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3709,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116199:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3712,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116233:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3711,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116233:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3714,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116265:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3713,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116265:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3716,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116293:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3715,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116293:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3718,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116326:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3717,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "116326:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3720,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116355:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3719,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116355:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3722,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116383:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3721,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116383:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3724,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116412:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3723,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116412:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3726,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116442:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3725,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "116442:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3728,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3730,
                        "src": "116464:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3727,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "116464:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116159:325:0"
                  },
                  "src": "116142:343:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3731,
                    "nodeType": "StructuredDocumentation",
                    "src": "116491:70:0",
                    "text": "@dev The factory type of `LiquidityLockerFactory`."
                  },
                  "functionSelector": "c5ba73ed",
                  "id": 3736,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "LL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3732,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116585:2:0"
                  },
                  "returnParameters": {
                    "id": 3735,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3734,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3736,
                        "src": "116611:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3733,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "116611:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116610:7:0"
                  },
                  "scope": 3821,
                  "src": "116566:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3737,
                    "nodeType": "StructuredDocumentation",
                    "src": "116624:66:0",
                    "text": "@dev The factory type of `StakeLockerFactory`."
                  },
                  "functionSelector": "9f71f14a",
                  "id": 3742,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "SL_FACTORY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3738,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116714:2:0"
                  },
                  "returnParameters": {
                    "id": 3741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3740,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3742,
                        "src": "116740:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 3739,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "116740:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116739:7:0"
                  },
                  "scope": 3821,
                  "src": "116695:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3743,
                    "nodeType": "StructuredDocumentation",
                    "src": "116753:69:0",
                    "text": "@dev The incrementor for number of Pools created."
                  },
                  "functionSelector": "945164e7",
                  "id": 3748,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolsCreated",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3744,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116848:2:0"
                  },
                  "returnParameters": {
                    "id": 3747,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3746,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3748,
                        "src": "116874:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3745,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "116874:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116873:9:0"
                  },
                  "scope": 3821,
                  "src": "116827:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3749,
                    "nodeType": "StructuredDocumentation",
                    "src": "116889:59:0",
                    "text": "@dev The current MapleGlobals instance."
                  },
                  "functionSelector": "c3124525",
                  "id": 3754,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3750,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "116969:2:0"
                  },
                  "returnParameters": {
                    "id": 3753,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3752,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3754,
                        "src": "116995:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3751,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "116995:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "116994:15:0"
                  },
                  "scope": 3821,
                  "src": "116953:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3755,
                    "nodeType": "StructuredDocumentation",
                    "src": "117016:105:0",
                    "text": "@param  index An index of a Pool.\n@return The address of the Pool at `index`."
                  },
                  "functionSelector": "ac4afa38",
                  "id": 3762,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pools",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3758,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3757,
                        "mutability": "mutable",
                        "name": "index",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3762,
                        "src": "117141:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3756,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "117141:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117140:15:0"
                  },
                  "returnParameters": {
                    "id": 3761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3760,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3762,
                        "src": "117179:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3759,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117179:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117178:9:0"
                  },
                  "scope": 3821,
                  "src": "117126:62:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3763,
                    "nodeType": "StructuredDocumentation",
                    "src": "117194:116:0",
                    "text": "@param  pool The address of a Pool.\n@return Whether the contract at `address` is a Pool."
                  },
                  "functionSelector": "5b16ebb7",
                  "id": 3770,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3766,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3765,
                        "mutability": "mutable",
                        "name": "pool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3770,
                        "src": "117331:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3764,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117331:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117330:14:0"
                  },
                  "returnParameters": {
                    "id": 3769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3768,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3770,
                        "src": "117368:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3767,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "117368:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117367:6:0"
                  },
                  "scope": 3821,
                  "src": "117315:59:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3771,
                    "nodeType": "StructuredDocumentation",
                    "src": "117380:197:0",
                    "text": "@param  poolFactoryAdmin The address of a PoolFactoryAdmin.\n@return Whether the `poolFactoryAdmin` has permission to do certain operations in case of disaster management"
                  },
                  "functionSelector": "6050abb2",
                  "id": 3778,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolFactoryAdmins",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3774,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3773,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3778,
                        "src": "117609:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3772,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117609:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117608:26:0"
                  },
                  "returnParameters": {
                    "id": 3777,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3776,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3778,
                        "src": "117658:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3775,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "117658:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117657:6:0"
                  },
                  "scope": 3821,
                  "src": "117582:82:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3779,
                    "nodeType": "StructuredDocumentation",
                    "src": "117670:172:0",
                    "text": "@dev   Sets MapleGlobals instance. \n@dev   Only the Governor can call this function. \n@param newGlobals The address of new MapleGlobals."
                  },
                  "functionSelector": "cc2e0a26",
                  "id": 3784,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3782,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3781,
                        "mutability": "mutable",
                        "name": "newGlobals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3784,
                        "src": "117867:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3780,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "117867:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "117866:20:0"
                  },
                  "returnParameters": {
                    "id": 3783,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "117895:0:0"
                  },
                  "scope": 3821,
                  "src": "117847:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3785,
                    "nodeType": "StructuredDocumentation",
                    "src": "117902:735:0",
                    "text": "@dev    Instantiates a Pool. \n@dev    It emits a `PoolCreated` event. \n@param  liquidityAsset The asset escrowed in a LiquidityLocker.\n@param  stakeAsset     The asset escrowed in a StakeLocker.\n@param  slFactory      The factory to instantiate a StakeLocker from.\n@param  llFactory      The factory to instantiate a LiquidityLocker from.\n@param  stakingFee     The fee that Stakers earn on interest, in basis points.\n@param  delegateFee    The fee that the Pool Delegate earns on interest, in basis points.\n@param  liquidityCap   The amount of Liquidity Asset accepted by the Pool.\n@return poolAddress    The address of the instantiated Pool."
                  },
                  "functionSelector": "312b8982",
                  "id": 3804,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "createPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3787,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118671:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3786,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118671:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3789,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118703:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3788,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118703:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3791,
                        "mutability": "mutable",
                        "name": "slFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118731:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3790,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118731:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3793,
                        "mutability": "mutable",
                        "name": "llFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118758:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3792,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118758:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3795,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118785:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3794,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "118785:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3797,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118813:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3796,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "118813:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3799,
                        "mutability": "mutable",
                        "name": "liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118842:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3798,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "118842:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "118661:207:0"
                  },
                  "returnParameters": {
                    "id": 3803,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3802,
                        "mutability": "mutable",
                        "name": "poolAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3804,
                        "src": "118887:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3801,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "118887:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "118886:21:0"
                  },
                  "scope": 3821,
                  "src": "118642:266:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3805,
                    "nodeType": "StructuredDocumentation",
                    "src": "118914:356:0",
                    "text": "@dev   Sets a PoolFactory Admin. \n@dev   Only the Governor can call this function. \n@dev   It emits a `PoolFactoryAdminSet` event. \n@param poolFactoryAdmin An address being allowed or disallowed as a PoolFactory Admin.\n@param allowed          Whether `poolFactoryAdmin` is allowed as a PoolFactory Admin."
                  },
                  "functionSelector": "f3f616c0",
                  "id": 3812,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolFactoryAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3810,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3807,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3812,
                        "src": "119304:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3806,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "119304:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3809,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3812,
                        "src": "119330:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3808,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "119330:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "119303:40:0"
                  },
                  "returnParameters": {
                    "id": 3811,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119352:0:0"
                  },
                  "scope": 3821,
                  "src": "119275:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3813,
                    "nodeType": "StructuredDocumentation",
                    "src": "119359:184:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. \n@dev Only the Governor or a PoolFactory Admin can call this function. "
                  },
                  "functionSelector": "8456cb59",
                  "id": 3816,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3814,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119562:2:0"
                  },
                  "returnParameters": {
                    "id": 3815,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119573:0:0"
                  },
                  "scope": 3821,
                  "src": "119548:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3817,
                    "nodeType": "StructuredDocumentation",
                    "src": "119580:189:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Governor or a PoolFactory Admin can call this function. "
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 3820,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3818,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119790:2:0"
                  },
                  "returnParameters": {
                    "id": 3819,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "119801:0:0"
                  },
                  "scope": 3821,
                  "src": "119774:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "114988:4817:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3823,
                    "name": "IExtendedFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2006,
                    "src": "120238:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IExtendedFDT_$2006",
                      "typeString": "contract IExtendedFDT"
                    }
                  },
                  "id": 3824,
                  "nodeType": "InheritanceSpecifier",
                  "src": "120238:12:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3822,
                "nodeType": "StructuredDocumentation",
                "src": "120119:90:0",
                "text": "@title StakeLockerFDT inherits ExtendedFDT and accounts for gains/losses for Stakers."
              },
              "fullyImplemented": false,
              "id": 3849,
              "linearizedBaseContracts": [
                3849,
                2006,
                141,
                77
              ],
              "name": "IStakeLockerFDT",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3825,
                    "nodeType": "StructuredDocumentation",
                    "src": "120258:50:0",
                    "text": "@dev The ERC-2222 Funds Token."
                  },
                  "functionSelector": "63f04b15",
                  "id": 3830,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsToken",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3826,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120332:2:0"
                  },
                  "returnParameters": {
                    "id": 3829,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3828,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3830,
                        "src": "120358:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3827,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "120358:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120357:8:0"
                  },
                  "scope": 3849,
                  "src": "120313:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3831,
                    "nodeType": "StructuredDocumentation",
                    "src": "120372:60:0",
                    "text": "@dev The sum of all unrecognized losses."
                  },
                  "functionSelector": "aedc78c3",
                  "id": 3836,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bptLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3832,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120455:2:0"
                  },
                  "returnParameters": {
                    "id": 3835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3834,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3836,
                        "src": "120481:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3833,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "120481:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120480:9:0"
                  },
                  "scope": 3849,
                  "src": "120437:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3837,
                    "nodeType": "StructuredDocumentation",
                    "src": "120496:89:0",
                    "text": "@dev The amount of losses present and accounted for in this contract."
                  },
                  "functionSelector": "fec984e3",
                  "id": 3842,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lossesBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3838,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120612:2:0"
                  },
                  "returnParameters": {
                    "id": 3841,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3840,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3842,
                        "src": "120638:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3839,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "120638:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120637:9:0"
                  },
                  "scope": 3849,
                  "src": "120590:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3843,
                    "nodeType": "StructuredDocumentation",
                    "src": "120653:123:0",
                    "text": "@dev The amount of `fundsToken` (Liquidity Asset) currently present and accounted for in this contract."
                  },
                  "functionSelector": "a9691f3f",
                  "id": 3848,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundsTokenBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3844,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "120807:2:0"
                  },
                  "returnParameters": {
                    "id": 3847,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3846,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3848,
                        "src": "120833:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3845,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "120833:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "120832:9:0"
                  },
                  "scope": 3849,
                  "src": "120781:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "120209:636:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 3851,
                    "name": "IStakeLockerFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3849,
                    "src": "121250:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IStakeLockerFDT_$3849",
                      "typeString": "contract IStakeLockerFDT"
                    }
                  },
                  "id": 3852,
                  "nodeType": "InheritanceSpecifier",
                  "src": "121250:15:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                2006,
                3849
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 3850,
                "nodeType": "StructuredDocumentation",
                "src": "121116:108:0",
                "text": "@title StakeLocker holds custody of stakeAsset tokens for a given Pool and earns revenue from interest."
              },
              "fullyImplemented": false,
              "id": 4104,
              "linearizedBaseContracts": [
                4104,
                3849,
                2006,
                141,
                77
              ],
              "name": "IStakeLocker",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3853,
                    "nodeType": "StructuredDocumentation",
                    "src": "121273:101:0",
                    "text": "@dev   Emits an event indicating that the Stake Locker is now open to the public."
                  },
                  "id": 3855,
                  "name": "StakeLockerOpened",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3854,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "121402:2:0"
                  },
                  "src": "121379:26:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3856,
                    "nodeType": "StructuredDocumentation",
                    "src": "121411:270:0",
                    "text": "@dev   Emits an event indicating some Balance was updated.\n@param staker  The address of a Staker.\n@param token   The address of the token for which the balance of `staker` changed.\n@param balance The new balance for `staker`."
                  },
                  "id": 3864,
                  "name": "BalanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3863,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3858,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3864,
                        "src": "121707:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3857,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "121707:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3860,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3864,
                        "src": "121731:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3859,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "121731:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3862,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3864,
                        "src": "121754:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3861,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "121754:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "121706:64:0"
                  },
                  "src": "121686:85:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3865,
                    "nodeType": "StructuredDocumentation",
                    "src": "121777:285:0",
                    "text": "@dev   Emits an event indicating that the ability of `staker` to stake before the locker is open to the public, has changed.\n@param staker The address of some account.\n@param status Whether `staker` can stake before the locker is open to the public."
                  },
                  "id": 3871,
                  "name": "AllowListUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3870,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3867,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3871,
                        "src": "122090:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3866,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "122090:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3869,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3871,
                        "src": "122114:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3868,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "122114:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122089:37:0"
                  },
                  "src": "122067:60:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3872,
                    "nodeType": "StructuredDocumentation",
                    "src": "122133:209:0",
                    "text": "@dev   Emits an event indicating a that a Staker's effective stake date has changed.\n@param staker    The address of a Staker.\n@param stakeDate The new effective stake date."
                  },
                  "id": 3878,
                  "name": "StakeDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3877,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3874,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3878,
                        "src": "122370:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3873,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "122370:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3876,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3878,
                        "src": "122394:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3875,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122394:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122369:43:0"
                  },
                  "src": "122347:66:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3879,
                    "nodeType": "StructuredDocumentation",
                    "src": "122419:151:0",
                    "text": "@dev   Emits an event indicating that the stake lockup period has changed.\n@param lockupPeriod The new stake lockup period."
                  },
                  "id": 3883,
                  "name": "LockupPeriodUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3882,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3881,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "lockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3883,
                        "src": "122601:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3880,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122601:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122600:22:0"
                  },
                  "src": "122575:48:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3884,
                    "nodeType": "StructuredDocumentation",
                    "src": "122629:220:0",
                    "text": "@dev   Emits an event indicating that the cooldown timestamp for a staker has changed.\n@param staker   The address of a Staker.\n@param cooldown The new cooldown timestamp for `staker`."
                  },
                  "id": 3890,
                  "name": "Cooldown",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3889,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3886,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3890,
                        "src": "122869:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3885,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "122869:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3888,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "cooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3890,
                        "src": "122893:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3887,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "122893:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "122868:42:0"
                  },
                  "src": "122854:57:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3891,
                    "nodeType": "StructuredDocumentation",
                    "src": "122917:210:0",
                    "text": "@dev   Emits an event indicating `staker` has added `amount` to the total they have staked.\n@param staker The address of a Staker.\n@param amount The additional amount staked."
                  },
                  "id": 3897,
                  "name": "Stake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3896,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3893,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3897,
                        "src": "123144:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3892,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123144:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3895,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3897,
                        "src": "123168:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3894,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "123168:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "123143:40:0"
                  },
                  "src": "123132:52:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3898,
                    "nodeType": "StructuredDocumentation",
                    "src": "123190:205:0",
                    "text": "@dev   Emits an event indicating `staker` has removed `amount` from the total they have staked.\n@param staker The address of a Staker.\n@param amount The amount unstaked."
                  },
                  "id": 3904,
                  "name": "Unstake",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3903,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3900,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3904,
                        "src": "123414:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3899,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123414:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3902,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3904,
                        "src": "123438:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3901,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "123438:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "123413:40:0"
                  },
                  "src": "123400:54:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3905,
                    "nodeType": "StructuredDocumentation",
                    "src": "123460:431:0",
                    "text": "@dev   Emits an event indicating that a Custodian transferred some StakeLockerFDTs for purposes of custody.\n@param custodian The address of the Custodian initiating the transfer.\n@param from      The account that owns the StakeLockerFDTs.\n@param to        The address of a Custodian taking custody of the amount.\n@param amount    The amount of StakeLockerFDTs being re-custodied."
                  },
                  "id": 3915,
                  "name": "CustodyTransfer",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3914,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3907,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123918:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3906,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123918:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3909,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123945:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3908,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123945:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3911,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123967:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3910,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "123967:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3913,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3915,
                        "src": "123987:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3912,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "123987:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "123917:85:0"
                  },
                  "src": "123896:107:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3916,
                    "nodeType": "StructuredDocumentation",
                    "src": "124009:467:0",
                    "text": "@dev   Emits an event indicating that the amount being custodied by a Custodian, on behalf of a Staker, has changed.\n@param staker       The address of a Staker.\n@param custodian    The address of a Custodian.\n@param oldAllowance The old amount of StakeLockerFDTs `custodian` had custodied on behalf of `staker`.\n@param newAllowance The new amount of StakeLockerFDTs `custodian` has custodied on behalf of `staker`."
                  },
                  "id": 3926,
                  "name": "CustodyAllowanceChanged",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3925,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3918,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124511:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3917,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "124511:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3920,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124535:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3919,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "124535:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3922,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "oldAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124562:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3921,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "124562:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3924,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3926,
                        "src": "124584:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3923,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "124584:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "124510:95:0"
                  },
                  "src": "124481:125:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3927,
                    "nodeType": "StructuredDocumentation",
                    "src": "124612:339:0",
                    "text": "@dev   Emits an event indicating that the total amount of StakeLockerFDTs custodied, on behalf of a Staker, by all custodians, has changed.\n@param staker            The address of a Staker.\n@param newTotalAllowance The total amount of StakeLockerFDTs custodied, on behalf of `staker`, by all custodians."
                  },
                  "id": 3933,
                  "name": "TotalCustodyAllowanceUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3932,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3929,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3933,
                        "src": "124991:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3928,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "124991:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3931,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3933,
                        "src": "125015:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3930,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "125015:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "124990:51:0"
                  },
                  "src": "124956:86:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3934,
                    "nodeType": "StructuredDocumentation",
                    "src": "125048:108:0",
                    "text": "@dev The asset deposited by Stakers into this contract, for liquidation during defaults."
                  },
                  "functionSelector": "80cd916d",
                  "id": 3939,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3935,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125180:2:0"
                  },
                  "returnParameters": {
                    "id": 3938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3937,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3939,
                        "src": "125206:6:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 3936,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "125206:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125205:8:0"
                  },
                  "scope": 4104,
                  "src": "125161:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3940,
                    "nodeType": "StructuredDocumentation",
                    "src": "125220:116:0",
                    "text": "@dev The Liquidity Asset for the Pool as well as the dividend token for StakeLockerFDT interest."
                  },
                  "functionSelector": "209b2bca",
                  "id": 3945,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "liquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3941,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125364:2:0"
                  },
                  "returnParameters": {
                    "id": 3944,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3943,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3945,
                        "src": "125390:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3942,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125390:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125389:9:0"
                  },
                  "scope": 4104,
                  "src": "125341:58:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3946,
                    "nodeType": "StructuredDocumentation",
                    "src": "125405:41:0",
                    "text": "@dev The parent Pool."
                  },
                  "functionSelector": "16f0115b",
                  "id": 3951,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3947,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125464:2:0"
                  },
                  "returnParameters": {
                    "id": 3950,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3949,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3951,
                        "src": "125490:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3948,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125490:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125489:9:0"
                  },
                  "scope": 4104,
                  "src": "125451:48:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3952,
                    "nodeType": "StructuredDocumentation",
                    "src": "125505:82:0",
                    "text": "@dev The number of seconds for which unstaking is not allowed."
                  },
                  "functionSelector": "ee947a7c",
                  "id": 3957,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3953,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "125613:2:0"
                  },
                  "returnParameters": {
                    "id": 3956,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3955,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3957,
                        "src": "125639:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3954,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "125639:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125638:9:0"
                  },
                  "scope": 4104,
                  "src": "125592:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3958,
                    "nodeType": "StructuredDocumentation",
                    "src": "125654:115:0",
                    "text": "@param  account The address of a Staker.\n@return The effective stake date of `account`."
                  },
                  "functionSelector": "5190bbaf",
                  "id": 3965,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stakeDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3961,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3960,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3965,
                        "src": "125793:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3959,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "125793:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125792:17:0"
                  },
                  "returnParameters": {
                    "id": 3964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3963,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3965,
                        "src": "125828:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3962,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "125828:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "125827:9:0"
                  },
                  "scope": 4104,
                  "src": "125774:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3966,
                    "nodeType": "StructuredDocumentation",
                    "src": "125843:129:0",
                    "text": "@param  account The address of a Staker.\n@return The timestamp of when `account` called `cooldown()`."
                  },
                  "functionSelector": "ff887130",
                  "id": 3973,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstakeCooldown",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3969,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3968,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3973,
                        "src": "126002:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3967,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126002:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126001:17:0"
                  },
                  "returnParameters": {
                    "id": 3972,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3971,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3973,
                        "src": "126042:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3970,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "126042:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126041:9:0"
                  },
                  "scope": 4104,
                  "src": "125977:74:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3974,
                    "nodeType": "StructuredDocumentation",
                    "src": "126057:106:0",
                    "text": "@param  account The address of a Staker.\n@return Whether `account` is allowed."
                  },
                  "functionSelector": "d63a8e11",
                  "id": 3981,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "allowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3977,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3976,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3981,
                        "src": "126185:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3975,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126185:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126184:17:0"
                  },
                  "returnParameters": {
                    "id": 3980,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3979,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3981,
                        "src": "126225:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3978,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "126225:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126224:6:0"
                  },
                  "scope": 4104,
                  "src": "126168:63:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3982,
                    "nodeType": "StructuredDocumentation",
                    "src": "126237:211:0",
                    "text": "@param  account   The address of an account.\n@param  custodian The address of a custodian.\n@return The amount of StakeLockerFDTs of `account` that are \"locked\" at `custodian`."
                  },
                  "functionSelector": "c965b548",
                  "id": 3991,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "custodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3987,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3984,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3991,
                        "src": "126479:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3983,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126479:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3986,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3991,
                        "src": "126496:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3985,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126496:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126478:36:0"
                  },
                  "returnParameters": {
                    "id": 3990,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3989,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3991,
                        "src": "126538:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3988,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "126538:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126537:9:0"
                  },
                  "scope": 4104,
                  "src": "126453:94:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 3992,
                    "nodeType": "StructuredDocumentation",
                    "src": "126553:187:0",
                    "text": "@param  account   The address of an account.\n@return The total amount of StakeLockerFDTs that are \"locked\" for a given account, cannot be greater than balance."
                  },
                  "functionSelector": "af6d5571",
                  "id": 3999,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 3995,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3994,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3999,
                        "src": "126776:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3993,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "126776:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126775:17:0"
                  },
                  "returnParameters": {
                    "id": 3998,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3997,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 3999,
                        "src": "126816:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3996,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "126816:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126815:9:0"
                  },
                  "scope": 4104,
                  "src": "126745:80:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "1831ccf2",
                  "id": 4004,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4000,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "126852:2:0"
                  },
                  "returnParameters": {
                    "id": 4003,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4002,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4004,
                        "src": "126878:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4001,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "126878:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "126877:6:0"
                  },
                  "scope": 4104,
                  "src": "126831:53:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4005,
                    "nodeType": "StructuredDocumentation",
                    "src": "126890:312:0",
                    "text": "@dev   Updates Staker status on the allowlist. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits an `AllowListUpdated` event. \n@param staker The address of the Staker to set status for.\n@param status The status of the Staker on allowlist."
                  },
                  "functionSelector": "b12527f8",
                  "id": 4012,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowlist",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4010,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4007,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4012,
                        "src": "127229:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4006,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "127229:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4009,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4012,
                        "src": "127245:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4008,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "127245:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "127228:29:0"
                  },
                  "returnParameters": {
                    "id": 4011,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127266:0:0"
                  },
                  "scope": 4104,
                  "src": "127207:60:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4013,
                    "nodeType": "StructuredDocumentation",
                    "src": "127273:182:0",
                    "text": "@dev Sets the StakeLocker as open to the public. \n@dev Only the Pool Delegate can call this function. \n@dev It emits a `StakeLockerOpened` event. "
                  },
                  "functionSelector": "0e754e86",
                  "id": 4016,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "openStakeLockerToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4014,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127492:2:0"
                  },
                  "returnParameters": {
                    "id": 4015,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127503:0:0"
                  },
                  "scope": 4104,
                  "src": "127460:44:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4017,
                    "nodeType": "StructuredDocumentation",
                    "src": "127510:247:0",
                    "text": "@dev   Sets the lockup period. \n@dev   Only the Pool Delegate can call this function. \n@dev   It emits a `LockupPeriodUpdated` event. \n@param newLockupPeriod New lockup period used to restrict unstaking."
                  },
                  "functionSelector": "c771c390",
                  "id": 4022,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4020,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4019,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4022,
                        "src": "127787:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4018,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "127787:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "127786:25:0"
                  },
                  "returnParameters": {
                    "id": 4021,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "127820:0:0"
                  },
                  "scope": 4104,
                  "src": "127762:59:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4023,
                    "nodeType": "StructuredDocumentation",
                    "src": "127827:263:0",
                    "text": "@dev   Transfers an amount of Stake Asset to a destination account. \n@dev   Only the Pool can call this function. \n@param dst The destination to transfer Stake Asset to.\n@param amt The amount of Stake Asset to transfer."
                  },
                  "functionSelector": "f2d5d56b",
                  "id": 4030,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pull",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4028,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4025,
                        "mutability": "mutable",
                        "name": "dst",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4030,
                        "src": "128109:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4024,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "128109:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4027,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4030,
                        "src": "128122:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4026,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "128122:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "128108:26:0"
                  },
                  "returnParameters": {
                    "id": 4029,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128143:0:0"
                  },
                  "scope": 4104,
                  "src": "128095:49:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4031,
                    "nodeType": "StructuredDocumentation",
                    "src": "128150:222:0",
                    "text": "@dev   Updates loss accounting for StakeLockerFDTs after BPTs have been burned. \n@dev   Only the Pool can call this function. \n@param bptsBurned The amount of BPTs that have been burned."
                  },
                  "functionSelector": "bcd01be7",
                  "id": 4036,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateLosses",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4034,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4033,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4036,
                        "src": "128399:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4032,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "128399:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "128398:20:0"
                  },
                  "returnParameters": {
                    "id": 4035,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128427:0:0"
                  },
                  "scope": 4104,
                  "src": "128377:51:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4037,
                    "nodeType": "StructuredDocumentation",
                    "src": "128434:371:0",
                    "text": "@dev   Handles a Staker's depositing of an amount of Stake Asset, minting them StakeLockerFDTs. \n@dev   It emits a `StakeDateUpdated` event. \n@dev   It emits a `Stake` event. \n@dev   It emits a `Cooldown` event. \n@dev   It emits a `BalanceUpdated` event. \n@param amt The amount of Stake Asset (BPTs) to deposit."
                  },
                  "functionSelector": "a694fc3a",
                  "id": 4042,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "stake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4040,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4039,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4042,
                        "src": "128825:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4038,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "128825:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "128824:13:0"
                  },
                  "returnParameters": {
                    "id": 4041,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "128846:0:0"
                  },
                  "scope": 4104,
                  "src": "128810:37:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4043,
                    "nodeType": "StructuredDocumentation",
                    "src": "128853:174:0",
                    "text": "@dev Activates the cooldown period to unstake. \n@dev It can't be called if the account is not staking. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "8a10555c",
                  "id": 4046,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4044,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129056:2:0"
                  },
                  "returnParameters": {
                    "id": 4045,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129067:0:0"
                  },
                  "scope": 4104,
                  "src": "129032:36:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4047,
                    "nodeType": "StructuredDocumentation",
                    "src": "129074:150:0",
                    "text": "@dev Cancels an initiated unstake by resetting the calling account's unstake cooldown. \n@dev It emits a `Cooldown` event. "
                  },
                  "functionSelector": "4ab17969",
                  "id": 4050,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelUnstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4048,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129251:2:0"
                  },
                  "returnParameters": {
                    "id": 4049,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129262:0:0"
                  },
                  "scope": 4104,
                  "src": "129229:34:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4051,
                    "nodeType": "StructuredDocumentation",
                    "src": "129269:357:0",
                    "text": "@dev   Handles a Staker's withdrawing of an amount of Stake Asset, minus any losses. \n@dev   It also claims interest and burns StakeLockerFDTs for the calling account. \n@dev   It emits an `Unstake` event. \n@dev   It emits a `BalanceUpdated` event. \n@param amt The amount of Stake Asset (BPTs) to withdraw."
                  },
                  "functionSelector": "2e17de78",
                  "id": 4056,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unstake",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4054,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4053,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4056,
                        "src": "129648:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4052,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "129648:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "129647:13:0"
                  },
                  "returnParameters": {
                    "id": 4055,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129669:0:0"
                  },
                  "scope": 4104,
                  "src": "129631:39:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    120
                  ],
                  "body": null,
                  "documentation": {
                    "id": 4057,
                    "nodeType": "StructuredDocumentation",
                    "src": "129676:183:0",
                    "text": "@dev Withdraws all claimable interest earned from the StakeLocker for an account. \n@dev It emits a `BalanceUpdated` event if there are withdrawable funds. "
                  },
                  "functionSelector": "24600fc3",
                  "id": 4061,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4059,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "129898:8:0"
                  },
                  "parameters": {
                    "id": 4058,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129886:2:0"
                  },
                  "returnParameters": {
                    "id": 4060,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "129906:0:0"
                  },
                  "scope": 4104,
                  "src": "129864:43:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4062,
                    "nodeType": "StructuredDocumentation",
                    "src": "129917:436:0",
                    "text": "@dev   Increases the custody allowance for a given Custodian corresponding to the account (`msg.sender`).\n@dev   It emits a `CustodyAllowanceChanged` event.\n@dev   It emits a `TotalCustodyAllowanceUpdated` event.\n@param custodian The address which will act as Custodian of a given amount for an account.\n@param amount    The number of additional FDTs to be custodied by the Custodian."
                  },
                  "functionSelector": "27f91856",
                  "id": 4069,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4067,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4064,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4069,
                        "src": "130392:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4063,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "130392:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4066,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4069,
                        "src": "130411:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4065,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "130411:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "130391:35:0"
                  },
                  "returnParameters": {
                    "id": 4068,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "130435:0:0"
                  },
                  "scope": 4104,
                  "src": "130358:78:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4070,
                    "nodeType": "StructuredDocumentation",
                    "src": "130442:692:0",
                    "text": "@dev   Transfers custodied StakeLockerFDTs back to the account. \n@dev   `from` and `to` should always be equal in this implementation. \n@dev   This means that the Custodian can only decrease their own allowance and unlock funds for the original owner. \n@dev   It emits a `CustodyTransfer` event. \n@dev   It emits a `CustodyAllowanceChanged` event. \n@dev   It emits a `TotalCustodyAllowanceUpdated` event. \n@param from   The address which holds the StakeLockerFDTs.\n@param to     The address which will be the new owner of the amount of StakeLockerFDTs.\n@param amount The mount of StakeLockerFDTs transferred."
                  },
                  "functionSelector": "2ac04ac8",
                  "id": 4079,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4077,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4072,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4079,
                        "src": "131168:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4071,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "131168:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4074,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4079,
                        "src": "131182:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4073,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "131182:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4076,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4079,
                        "src": "131194:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4075,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "131194:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "131167:42:0"
                  },
                  "returnParameters": {
                    "id": 4078,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131218:0:0"
                  },
                  "scope": 4104,
                  "src": "131139:80:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4080,
                    "nodeType": "StructuredDocumentation",
                    "src": "131225:182:0",
                    "text": "@dev Triggers paused state. \n@dev Halts functionality for certain functions. \n@dev Only the Pool Delegate or a Pool Admin can call this function. "
                  },
                  "functionSelector": "8456cb59",
                  "id": 4083,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4081,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131426:2:0"
                  },
                  "returnParameters": {
                    "id": 4082,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131437:0:0"
                  },
                  "scope": 4104,
                  "src": "131412:26:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4084,
                    "nodeType": "StructuredDocumentation",
                    "src": "131444:186:0",
                    "text": "@dev Triggers unpaused state. \n@dev Restores functionality for certain functions. \n@dev Only the Pool Delegate or a Pool Admin can call this function."
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 4087,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4085,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131651:2:0"
                  },
                  "returnParameters": {
                    "id": 4086,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "131662:0:0"
                  },
                  "scope": 4104,
                  "src": "131635:28:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4088,
                    "nodeType": "StructuredDocumentation",
                    "src": "131669:130:0",
                    "text": "@dev Returns if the unstake cooldown period has passed for `msg.sender` and if they are in the unstake window."
                  },
                  "functionSelector": "86bf1da3",
                  "id": 4095,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isUnstakeAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4091,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4090,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4095,
                        "src": "131830:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4089,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "131830:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "131829:14:0"
                  },
                  "returnParameters": {
                    "id": 4094,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4093,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4095,
                        "src": "131867:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4092,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "131867:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "131866:6:0"
                  },
                  "scope": 4104,
                  "src": "131804:69:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4096,
                    "nodeType": "StructuredDocumentation",
                    "src": "131879:183:0",
                    "text": "@dev Returns if an account is allowed to receive a transfer. \n@dev This is only possible if they have zero cooldown or they are past their unstake window. "
                  },
                  "functionSelector": "fab11078",
                  "id": 4103,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isReceiveAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4099,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4098,
                        "mutability": "mutable",
                        "name": "_unstakeCooldown",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4103,
                        "src": "132093:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4097,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "132093:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "132092:26:0"
                  },
                  "returnParameters": {
                    "id": 4102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4101,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4103,
                        "src": "132142:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4100,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "132142:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "132141:6:0"
                  },
                  "scope": 4104,
                  "src": "132067:81:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "121224:10927:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 4106,
                    "name": "ISubFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 596,
                    "src": "132435:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ISubFactory_$596",
                      "typeString": "contract ISubFactory"
                    }
                  },
                  "id": 4107,
                  "nodeType": "InheritanceSpecifier",
                  "src": "132435:11:0"
                }
              ],
              "contractDependencies": [
                596
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 4105,
                "nodeType": "StructuredDocumentation",
                "src": "132345:57:0",
                "text": "@title StakeLockerFactory instantiates StakeLockers."
              },
              "fullyImplemented": false,
              "id": 4156,
              "linearizedBaseContracts": [
                4156,
                596
              ],
              "name": "IStakeLockerFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 4108,
                    "nodeType": "StructuredDocumentation",
                    "src": "132454:496:0",
                    "text": "@dev   Emits an event indicating a StakeLocker was created.\n@param owner          The owner of the StakeLocker.\n@param stakeLocker    The address of the StakeLocker.\n@param stakeAsset     The Stake Asset this StakeLocker will escrow.\n@param liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n@param name           The name of the StakeLockerFDTs.\n@param symbol         The symbol of the StakeLockerFDTs."
                  },
                  "id": 4122,
                  "name": "StakeLockerCreated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4110,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "owner",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "132989:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4109,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "132989:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4112,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133020:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4111,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133020:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4114,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133049:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4113,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133049:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4116,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133077:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4115,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133077:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4118,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133109:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4117,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "133109:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4120,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4122,
                        "src": "133130:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4119,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "133130:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "132979:170:0"
                  },
                  "src": "132955:195:0"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4123,
                    "nodeType": "StructuredDocumentation",
                    "src": "133156:143:0",
                    "text": "@param  stakeLocker The address of a StakeLocker.\n@return The address of the owner of StakeLocker at `stakeLocker`."
                  },
                  "functionSelector": "666e1b39",
                  "id": 4130,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4125,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4130,
                        "src": "133319:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4124,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133319:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133318:21:0"
                  },
                  "returnParameters": {
                    "id": 4129,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4128,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4130,
                        "src": "133358:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4127,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133358:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133357:9:0"
                  },
                  "scope": 4156,
                  "src": "133304:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4131,
                    "nodeType": "StructuredDocumentation",
                    "src": "133373:109:0",
                    "text": "@param  stakeLocker Some address.\n@return Whether `stakeLocker` is a StakeLocker."
                  },
                  "functionSelector": "2ec63d7c",
                  "id": 4138,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4134,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4133,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4138,
                        "src": "133505:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4132,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "133505:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133504:21:0"
                  },
                  "returnParameters": {
                    "id": 4137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4136,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4138,
                        "src": "133544:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4135,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "133544:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133543:6:0"
                  },
                  "scope": 4156,
                  "src": "133487:63:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    595
                  ],
                  "body": null,
                  "documentation": {
                    "id": 4139,
                    "nodeType": "StructuredDocumentation",
                    "src": "133556:89:0",
                    "text": "@dev The type of the factory (i.e FactoryType::STAKE_LOCKER_FACTORY)."
                  },
                  "functionSelector": "64e1fd55",
                  "id": 4145,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "factoryType",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 4141,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "133682:8:0"
                  },
                  "parameters": {
                    "id": 4140,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "133670:2:0"
                  },
                  "returnParameters": {
                    "id": 4144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4143,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4145,
                        "src": "133705:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4142,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "133705:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "133704:7:0"
                  },
                  "scope": 4156,
                  "src": "133650:62:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 4146,
                    "nodeType": "StructuredDocumentation",
                    "src": "133718:371:0",
                    "text": "@dev    Instantiate a StakeLocker.\n@dev    It emits a `StakeLockerCreated` event.\n@param  stakeAsset     The address of the Stake Asset (generally Balancer Pool BPTs).\n@param  liquidityAsset The address of the Liquidity Asset (as defined in the Pool).\n@return stakeLocker    The address of the instantiated StakeLocker."
                  },
                  "functionSelector": "85de067e",
                  "id": 4155,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "newLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4151,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4148,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4155,
                        "src": "134113:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4147,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134113:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4150,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4155,
                        "src": "134133:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4149,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134133:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134112:44:0"
                  },
                  "returnParameters": {
                    "id": 4154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4153,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4155,
                        "src": "134175:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134175:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134174:21:0"
                  },
                  "scope": 4156,
                  "src": "134094:102:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "132402:1797:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 4312,
              "linearizedBaseContracts": [
                4312
              ],
              "name": "IBPool",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "a9059cbb",
                  "id": 4165,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4161,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4158,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4165,
                        "src": "134322:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4157,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134322:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4160,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4165,
                        "src": "134331:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134331:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134321:18:0"
                  },
                  "returnParameters": {
                    "id": 4164,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4163,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4165,
                        "src": "134358:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4162,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "134358:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134357:6:0"
                  },
                  "scope": 4312,
                  "src": "134304:60:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "9381cd2b",
                  "id": 4170,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "INIT_POOL_SUPPLY",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4166,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134395:2:0"
                  },
                  "returnParameters": {
                    "id": 4169,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4168,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4170,
                        "src": "134421:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4167,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134421:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134420:9:0"
                  },
                  "scope": 4312,
                  "src": "134370:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "992e2a92",
                  "id": 4175,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "MAX_OUT_RATIO",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4171,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134458:2:0"
                  },
                  "returnParameters": {
                    "id": 4174,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4173,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4175,
                        "src": "134484:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4172,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134484:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134483:9:0"
                  },
                  "scope": 4312,
                  "src": "134436:57:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "e4e1e538",
                  "id": 4184,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "bind",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4182,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4177,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4184,
                        "src": "134513:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4176,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134513:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4179,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4184,
                        "src": "134522:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4178,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134522:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4181,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4184,
                        "src": "134531:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4180,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134531:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134512:27:0"
                  },
                  "returnParameters": {
                    "id": 4183,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134548:0:0"
                  },
                  "scope": 4312,
                  "src": "134499:50:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "70a08231",
                  "id": 4191,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4186,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4191,
                        "src": "134574:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4185,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134574:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134573:9:0"
                  },
                  "returnParameters": {
                    "id": 4190,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4189,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4191,
                        "src": "134606:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4188,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134606:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134605:9:0"
                  },
                  "scope": 4312,
                  "src": "134555:60:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "4bb278f3",
                  "id": 4194,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "finalize",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4192,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134638:2:0"
                  },
                  "returnParameters": {
                    "id": 4193,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134649:0:0"
                  },
                  "scope": 4312,
                  "src": "134621:29:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "8c28cbe8",
                  "id": 4199,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "gulp",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4197,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4196,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4199,
                        "src": "134670:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4195,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134670:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134669:9:0"
                  },
                  "returnParameters": {
                    "id": 4198,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134687:0:0"
                  },
                  "scope": 4312,
                  "src": "134656:32:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "8d4e4083",
                  "id": 4204,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isFinalized",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4200,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134714:2:0"
                  },
                  "returnParameters": {
                    "id": 4203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4202,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4204,
                        "src": "134740:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4201,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "134740:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134739:6:0"
                  },
                  "scope": 4312,
                  "src": "134694:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "2f37b624",
                  "id": 4211,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isBound",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4207,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4206,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4211,
                        "src": "134769:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4205,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134769:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134768:9:0"
                  },
                  "returnParameters": {
                    "id": 4210,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4209,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4211,
                        "src": "134801:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4208,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "134801:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134800:6:0"
                  },
                  "scope": 4312,
                  "src": "134752:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "cd2ed8fb",
                  "id": 4216,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNumTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4212,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "134834:2:0"
                  },
                  "returnParameters": {
                    "id": 4215,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4214,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4216,
                        "src": "134860:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4213,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134860:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134859:9:0"
                  },
                  "scope": 4312,
                  "src": "134813:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "f8b2cb4f",
                  "id": 4223,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBalance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4219,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4218,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4223,
                        "src": "134895:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4217,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134895:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134894:9:0"
                  },
                  "returnParameters": {
                    "id": 4222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4221,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4223,
                        "src": "134927:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4220,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "134927:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134926:9:0"
                  },
                  "scope": 4312,
                  "src": "134875:61:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "f1b8a9b7",
                  "id": 4230,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getNormalizedWeight",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4225,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4230,
                        "src": "134971:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4224,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "134971:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "134970:9:0"
                  },
                  "returnParameters": {
                    "id": 4229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4228,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4230,
                        "src": "135003:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4227,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135003:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135002:9:0"
                  },
                  "scope": 4312,
                  "src": "134942:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "948d8ce6",
                  "id": 4237,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getDenormalizedWeight",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4233,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4232,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4237,
                        "src": "135049:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4231,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "135049:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135048:9:0"
                  },
                  "returnParameters": {
                    "id": 4236,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4235,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4237,
                        "src": "135081:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4234,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135081:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135080:9:0"
                  },
                  "scope": 4312,
                  "src": "135018:72:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "936c3477",
                  "id": 4242,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTotalDenormalizedWeight",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4238,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135131:2:0"
                  },
                  "returnParameters": {
                    "id": 4241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4240,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4242,
                        "src": "135157:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4239,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135157:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135156:9:0"
                  },
                  "scope": 4312,
                  "src": "135096:70:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "d4cadf68",
                  "id": 4247,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSwapFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4243,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135191:2:0"
                  },
                  "returnParameters": {
                    "id": 4246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4245,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4247,
                        "src": "135217:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4244,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135217:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135216:9:0"
                  },
                  "scope": 4312,
                  "src": "135172:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "18160ddd",
                  "id": 4252,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4248,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135252:2:0"
                  },
                  "returnParameters": {
                    "id": 4251,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4250,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4252,
                        "src": "135278:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4249,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135278:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135277:9:0"
                  },
                  "scope": 4312,
                  "src": "135232:55:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "be3bbd2e",
                  "id": 4258,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getFinalTokens",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4253,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135316:2:0"
                  },
                  "returnParameters": {
                    "id": 4257,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4256,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4258,
                        "src": "135342:16:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4254,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "135342:7:0",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 4255,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "135342:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135341:18:0"
                  },
                  "scope": 4312,
                  "src": "135293:67:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "4f69c0d4",
                  "id": 4266,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "joinPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4264,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4260,
                        "mutability": "mutable",
                        "name": "poolAmountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4266,
                        "src": "135384:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4259,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "135384:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4263,
                        "mutability": "mutable",
                        "name": "maxAmountsIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4266,
                        "src": "135404:28:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4261,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "135404:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4262,
                          "length": null,
                          "nodeType": "ArrayTypeName",
                          "src": "135404:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135383:50:0"
                  },
                  "returnParameters": {
                    "id": 4265,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "135442:0:0"
                  },
                  "scope": 4312,
                  "src": "135366:77:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "89298012",
                  "id": 4283,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "calcSingleOutGivenPoolIn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4279,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4268,
                        "mutability": "mutable",
                        "name": "tokenBalanceOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135492:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135492:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4270,
                        "mutability": "mutable",
                        "name": "tokenWeightOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135525:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4269,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135525:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4272,
                        "mutability": "mutable",
                        "name": "poolSupply",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135557:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4271,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135557:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4274,
                        "mutability": "mutable",
                        "name": "totalWeight",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135585:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4273,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135585:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4276,
                        "mutability": "mutable",
                        "name": "poolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135614:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4275,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135614:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4278,
                        "mutability": "mutable",
                        "name": "swapFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135644:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4277,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135644:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135482:183:0"
                  },
                  "returnParameters": {
                    "id": 4282,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4281,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4283,
                        "src": "135689:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4280,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135689:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135688:9:0"
                  },
                  "scope": 4312,
                  "src": "135449:249:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "82f652ad",
                  "id": 4300,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "calcPoolInGivenSingleOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4296,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4285,
                        "mutability": "mutable",
                        "name": "tokenBalanceOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135747:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4284,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135747:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4287,
                        "mutability": "mutable",
                        "name": "tokenWeightOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135780:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4286,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135780:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4289,
                        "mutability": "mutable",
                        "name": "poolSupply",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135812:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4288,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135812:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4291,
                        "mutability": "mutable",
                        "name": "totalWeight",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135840:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4290,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135840:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4293,
                        "mutability": "mutable",
                        "name": "tokenAmountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135869:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4292,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135869:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4295,
                        "mutability": "mutable",
                        "name": "swapFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135901:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4294,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135901:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135737:185:0"
                  },
                  "returnParameters": {
                    "id": 4299,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4298,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4300,
                        "src": "135946:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4297,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "135946:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135945:9:0"
                  },
                  "scope": 4312,
                  "src": "135704:251:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "02c96748",
                  "id": 4311,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exitswapExternAmountOut",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4307,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4302,
                        "mutability": "mutable",
                        "name": "tokenOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "136003:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4301,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "136003:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4304,
                        "mutability": "mutable",
                        "name": "tokenAmountOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "136029:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4303,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136029:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4306,
                        "mutability": "mutable",
                        "name": "maxPoolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "136061:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4305,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136061:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "135993:97:0"
                  },
                  "returnParameters": {
                    "id": 4310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4309,
                        "mutability": "mutable",
                        "name": "poolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4311,
                        "src": "136109:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4308,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136109:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136108:22:0"
                  },
                  "scope": 4312,
                  "src": "135961:170:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "134280:1854:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 4313,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "136348:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 4314,
                  "nodeType": "InheritanceSpecifier",
                  "src": "136348:6:0"
                }
              ],
              "contractDependencies": [
                77
              ],
              "contractKind": "interface",
              "documentation": null,
              "fullyImplemented": false,
              "id": 4330,
              "linearizedBaseContracts": [
                4330,
                77
              ],
              "name": "IERC20Details",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "06fdde03",
                  "id": 4319,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4315,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "136375:2:0"
                  },
                  "returnParameters": {
                    "id": 4318,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4317,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4319,
                        "src": "136401:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4316,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "136401:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136400:15:0"
                  },
                  "scope": 4330,
                  "src": "136362:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "95d89b41",
                  "id": 4324,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "symbol",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4320,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "136437:2:0"
                  },
                  "returnParameters": {
                    "id": 4323,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4322,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4324,
                        "src": "136463:13:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4321,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "136463:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136462:15:0"
                  },
                  "scope": 4330,
                  "src": "136422:56:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": null,
                  "functionSelector": "313ce567",
                  "id": 4329,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "decimals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4325,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "136501:2:0"
                  },
                  "returnParameters": {
                    "id": 4328,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4327,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4329,
                        "src": "136527:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4326,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "136527:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "136526:9:0"
                  },
                  "scope": 4330,
                  "src": "136484:52:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 7772,
              "src": "136321:218:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4331,
                "nodeType": "StructuredDocumentation",
                "src": "136642:67:0",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 4572,
              "linearizedBaseContracts": [
                4572
              ],
              "name": "Address",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4347,
                    "nodeType": "Block",
                    "src": "137368:347:0",
                    "statements": [
                      {
                        "assignments": [
                          4340
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4340,
                            "mutability": "mutable",
                            "name": "size",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4347,
                            "src": "137565:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4339,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "137565:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4341,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "137565:12:0"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "137652:32:0",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "137654:28:0",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "account",
                                    "nodeType": "YulIdentifier",
                                    "src": "137674:7:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "extcodesize",
                                  "nodeType": "YulIdentifier",
                                  "src": "137662:11:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "137662:20:0"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "137654:4:0"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 4334,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "137674:7:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4340,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "137654:4:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 4342,
                        "nodeType": "InlineAssembly",
                        "src": "137643:41:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4343,
                            "name": "size",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4340,
                            "src": "137700:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "137707:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "137700:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4338,
                        "id": 4346,
                        "nodeType": "Return",
                        "src": "137693:15:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4332,
                    "nodeType": "StructuredDocumentation",
                    "src": "136732:565:0",
                    "text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ===="
                  },
                  "id": 4348,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isContract",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4335,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4334,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4348,
                        "src": "137322:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "137322:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "137321:17:0"
                  },
                  "returnParameters": {
                    "id": 4338,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4337,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4348,
                        "src": "137362:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4336,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "137362:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "137361:6:0"
                  },
                  "scope": 4572,
                  "src": "137302:413:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4381,
                    "nodeType": "Block",
                    "src": "138703:320:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4359,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "138729:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 4358,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "138721:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4357,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "138721:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4360,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "138721:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 4361,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "138721:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4362,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4353,
                                "src": "138746:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "138721:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
                              "id": 4364,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "138754:31:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              },
                              "value": "Address: insufficient balance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
                                "typeString": "literal_string \"Address: insufficient balance\""
                              }
                            ],
                            "id": 4356,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "138713:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "138713:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4366,
                        "nodeType": "ExpressionStatement",
                        "src": "138713:73:0"
                      },
                      {
                        "assignments": [
                          4368,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4368,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4381,
                            "src": "138875:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4367,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "138875:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 4375,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 4373,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "138925:2:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4369,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4351,
                                "src": "138893:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 4370,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "138893:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 4372,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 4371,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4353,
                                "src": "138916:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "138893:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "138893:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "138874:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4377,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4368,
                              "src": "138946:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
                              "id": 4378,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "138955:60:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              },
                              "value": "Address: unable to send value, recipient may have reverted"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
                                "typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
                              }
                            ],
                            "id": 4376,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "138938:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4379,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "138938:78:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4380,
                        "nodeType": "ExpressionStatement",
                        "src": "138938:78:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4349,
                    "nodeType": "StructuredDocumentation",
                    "src": "137721:906:0",
                    "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                  },
                  "id": 4382,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4354,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4351,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4382,
                        "src": "138651:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 4350,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "138651:15:0",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4353,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4382,
                        "src": "138678:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4352,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "138678:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "138650:43:0"
                  },
                  "returnParameters": {
                    "id": 4355,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "138703:0:0"
                  },
                  "scope": 4572,
                  "src": "138632:391:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4398,
                    "nodeType": "Block",
                    "src": "139853:82:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4393,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4385,
                              "src": "139881:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4394,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4387,
                              "src": "139889:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 4395,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "139895:32:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              },
                              "value": "Address: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
                                "typeString": "literal_string \"Address: low-level call failed\""
                              }
                            ],
                            "id": 4392,
                            "name": "functionCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4399,
                              4419
                            ],
                            "referencedDeclaration": 4419,
                            "src": "139868:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "139868:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4391,
                        "id": 4397,
                        "nodeType": "Return",
                        "src": "139861:67:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4383,
                    "nodeType": "StructuredDocumentation",
                    "src": "139029:730:0",
                    "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain`call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
                  },
                  "id": 4399,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4385,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4399,
                        "src": "139786:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4384,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "139786:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4387,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4399,
                        "src": "139802:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4386,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "139802:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "139785:35:0"
                  },
                  "returnParameters": {
                    "id": 4391,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4390,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4399,
                        "src": "139839:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4389,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "139839:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "139838:14:0"
                  },
                  "scope": 4572,
                  "src": "139764:171:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4418,
                    "nodeType": "Block",
                    "src": "140274:76:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4412,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4402,
                              "src": "140313:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4413,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4404,
                              "src": "140321:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 4414,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "140327:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 4415,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4406,
                              "src": "140330:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4411,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4439,
                              4489
                            ],
                            "referencedDeclaration": 4489,
                            "src": "140291:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "140291:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4410,
                        "id": 4417,
                        "nodeType": "Return",
                        "src": "140284:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4400,
                    "nodeType": "StructuredDocumentation",
                    "src": "139941:211:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 4419,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4407,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4402,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140179:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4401,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "140179:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4404,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140195:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4403,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140195:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4406,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140214:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4405,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "140214:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140178:63:0"
                  },
                  "returnParameters": {
                    "id": 4410,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4409,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4419,
                        "src": "140260:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4408,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140260:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140259:14:0"
                  },
                  "scope": 4572,
                  "src": "140157:193:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4438,
                    "nodeType": "Block",
                    "src": "140825:111:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4432,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4422,
                              "src": "140864:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4433,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4424,
                              "src": "140872:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4434,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4426,
                              "src": "140878:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
                              "id": 4435,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "140885:43:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              },
                              "value": "Address: low-level call with value failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
                                "typeString": "literal_string \"Address: low-level call with value failed\""
                              }
                            ],
                            "id": 4431,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4439,
                              4489
                            ],
                            "referencedDeclaration": 4489,
                            "src": "140842:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "140842:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4430,
                        "id": 4437,
                        "nodeType": "Return",
                        "src": "140835:94:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4420,
                    "nodeType": "StructuredDocumentation",
                    "src": "140356:351:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
                  },
                  "id": 4439,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4427,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4422,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140743:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4421,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "140743:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4424,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140759:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4423,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140759:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4426,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140778:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4425,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "140778:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140742:50:0"
                  },
                  "returnParameters": {
                    "id": 4430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4429,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4439,
                        "src": "140811:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4428,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "140811:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "140810:14:0"
                  },
                  "scope": 4572,
                  "src": "140712:224:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4488,
                    "nodeType": "Block",
                    "src": "141325:382:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4460,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4456,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "141351:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Address_$4572",
                                        "typeString": "library Address"
                                      }
                                    ],
                                    "id": 4455,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "141343:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4454,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "141343:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4457,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "141343:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 4458,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "141343:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4459,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4446,
                                "src": "141368:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "141343:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
                              "id": 4461,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "141375:40:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              },
                              "value": "Address: insufficient balance for call"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
                                "typeString": "literal_string \"Address: insufficient balance for call\""
                              }
                            ],
                            "id": 4453,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "141335:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141335:81:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4463,
                        "nodeType": "ExpressionStatement",
                        "src": "141335:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4466,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4442,
                                  "src": "141445:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4465,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4348,
                                "src": "141434:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 4467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "141434:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 4468,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "141454:31:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              },
                              "value": "Address: call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
                                "typeString": "literal_string \"Address: call to non-contract\""
                              }
                            ],
                            "id": 4464,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "141426:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141426:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4470,
                        "nodeType": "ExpressionStatement",
                        "src": "141426:60:0"
                      },
                      {
                        "assignments": [
                          4472,
                          4474
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4472,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4488,
                            "src": "141557:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4471,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "141557:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4474,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4488,
                            "src": "141571:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4473,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "141571:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4481,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4479,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4444,
                              "src": "141626:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4475,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4442,
                                "src": "141598:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 4476,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "141598:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 4478,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "argumentTypes": null,
                                "id": 4477,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4446,
                                "src": "141618:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "141598:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 4480,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141598:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "141556:75:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4483,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4472,
                              "src": "141666:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4484,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4474,
                              "src": "141675:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4485,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4448,
                              "src": "141687:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4482,
                            "name": "_verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4571,
                            "src": "141648:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 4486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "141648:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4452,
                        "id": 4487,
                        "nodeType": "Return",
                        "src": "141641:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4440,
                    "nodeType": "StructuredDocumentation",
                    "src": "140942:237:0",
                    "text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
                  },
                  "id": 4489,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4449,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4442,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141215:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4441,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "141215:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4444,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141231:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4443,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141231:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4446,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141250:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4445,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "141250:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4448,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141265:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4447,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "141265:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141214:78:0"
                  },
                  "returnParameters": {
                    "id": 4452,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4451,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4489,
                        "src": "141311:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4450,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141311:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141310:14:0"
                  },
                  "scope": 4572,
                  "src": "141184:523:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4505,
                    "nodeType": "Block",
                    "src": "141984:97:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4500,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4492,
                              "src": "142020:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4501,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4494,
                              "src": "142028:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
                              "id": 4502,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "142034:39:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              },
                              "value": "Address: low-level static call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
                                "typeString": "literal_string \"Address: low-level static call failed\""
                              }
                            ],
                            "id": 4499,
                            "name": "functionStaticCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4506,
                              4541
                            ],
                            "referencedDeclaration": 4541,
                            "src": "142001:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
                            }
                          },
                          "id": 4503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "142001:73:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4498,
                        "id": 4504,
                        "nodeType": "Return",
                        "src": "141994:80:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4490,
                    "nodeType": "StructuredDocumentation",
                    "src": "141713:166:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 4506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4495,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4492,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4506,
                        "src": "141912:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4491,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "141912:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4494,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4506,
                        "src": "141928:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4493,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141928:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141911:35:0"
                  },
                  "returnParameters": {
                    "id": 4498,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4497,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4506,
                        "src": "141970:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4496,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "141970:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "141969:14:0"
                  },
                  "scope": 4572,
                  "src": "141884:197:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4540,
                    "nodeType": "Block",
                    "src": "142393:288:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4520,
                                  "name": "target",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4509,
                                  "src": "142422:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4519,
                                "name": "isContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4348,
                                "src": "142411:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view returns (bool)"
                                }
                              },
                              "id": 4521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "142411:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
                              "id": 4522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "142431:38:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              },
                              "value": "Address: static call to non-contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
                                "typeString": "literal_string \"Address: static call to non-contract\""
                              }
                            ],
                            "id": 4518,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "142403:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "142403:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4524,
                        "nodeType": "ExpressionStatement",
                        "src": "142403:67:0"
                      },
                      {
                        "assignments": [
                          4526,
                          4528
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4526,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4540,
                            "src": "142541:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 4525,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "142541:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 4528,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4540,
                            "src": "142555:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4527,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "142555:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4533,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4531,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "142600:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4529,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4509,
                              "src": "142582:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4530,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "staticcall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "142582:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 4532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "142582:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "142540:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4535,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4526,
                              "src": "142640:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4536,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4528,
                              "src": "142649:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4537,
                              "name": "errorMessage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4513,
                              "src": "142661:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 4534,
                            "name": "_verifyCallResult",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4571,
                            "src": "142622:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                            }
                          },
                          "id": 4538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "142622:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 4517,
                        "id": 4539,
                        "nodeType": "Return",
                        "src": "142615:59:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4507,
                    "nodeType": "StructuredDocumentation",
                    "src": "142087:173:0",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
                  },
                  "id": 4541,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4509,
                        "mutability": "mutable",
                        "name": "target",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142293:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4508,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "142293:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4511,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142309:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4510,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142309:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4513,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142328:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4512,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "142328:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142292:63:0"
                  },
                  "returnParameters": {
                    "id": 4517,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4516,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4541,
                        "src": "142379:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4515,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142379:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142378:14:0"
                  },
                  "scope": 4572,
                  "src": "142265:416:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4570,
                    "nodeType": "Block",
                    "src": "142816:596:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 4552,
                          "name": "success",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4543,
                          "src": "142830:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4568,
                          "nodeType": "Block",
                          "src": "142887:519:0",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4556,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4545,
                                    "src": "142971:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 4557,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "142971:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 4558,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "142991:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "142971:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 4566,
                                "nodeType": "Block",
                                "src": "143343:53:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 4563,
                                          "name": "errorMessage",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4547,
                                          "src": "143368:12:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 4562,
                                        "name": "revert",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [
                                          -19,
                                          -19
                                        ],
                                        "referencedDeclaration": -19,
                                        "src": "143361:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                          "typeString": "function (string memory) pure"
                                        }
                                      },
                                      "id": 4564,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "143361:20:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 4565,
                                    "nodeType": "ExpressionStatement",
                                    "src": "143361:20:0"
                                  }
                                ]
                              },
                              "id": 4567,
                              "nodeType": "IfStatement",
                              "src": "142967:429:0",
                              "trueBody": {
                                "id": 4561,
                                "nodeType": "Block",
                                "src": "142994:343:0",
                                "statements": [
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "143178:145:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "143200:40:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "returndata",
                                                "nodeType": "YulIdentifier",
                                                "src": "143229:10:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "143223:5:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "143223:17:0"
                                          },
                                          "variables": [
                                            {
                                              "name": "returndata_size",
                                              "nodeType": "YulTypedName",
                                              "src": "143204:15:0",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "143272:2:0",
                                                    "type": "",
                                                    "value": "32"
                                                  },
                                                  {
                                                    "name": "returndata",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "143276:10:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "143268:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "143268:19:0"
                                              },
                                              {
                                                "name": "returndata_size",
                                                "nodeType": "YulIdentifier",
                                                "src": "143289:15:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "revert",
                                              "nodeType": "YulIdentifier",
                                              "src": "143261:6:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "143261:44:0"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "143261:44:0"
                                        }
                                      ]
                                    },
                                    "evmVersion": "istanbul",
                                    "externalReferences": [
                                      {
                                        "declaration": 4545,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "143229:10:0",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 4545,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "143276:10:0",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 4560,
                                    "nodeType": "InlineAssembly",
                                    "src": "143169:154:0"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "id": 4569,
                        "nodeType": "IfStatement",
                        "src": "142826:580:0",
                        "trueBody": {
                          "id": 4555,
                          "nodeType": "Block",
                          "src": "142839:42:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4553,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4545,
                                "src": "142860:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 4551,
                              "id": 4554,
                              "nodeType": "Return",
                              "src": "142853:17:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4571,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_verifyCallResult",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4548,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4543,
                        "mutability": "mutable",
                        "name": "success",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142714:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4542,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "142714:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4545,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142728:23:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4544,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142728:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4547,
                        "mutability": "mutable",
                        "name": "errorMessage",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142753:26:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4546,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "142753:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142713:67:0"
                  },
                  "returnParameters": {
                    "id": 4551,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4550,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4571,
                        "src": "142802:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4549,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "142802:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "142801:14:0"
                  },
                  "scope": 4572,
                  "src": "142687:725:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 7772,
              "src": "136710:6704:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4573,
                "nodeType": "StructuredDocumentation",
                "src": "143635:457:0",
                "text": " @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."
              },
              "fullyImplemented": true,
              "id": 4780,
              "linearizedBaseContracts": [
                4780
              ],
              "name": "SafeERC20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 4576,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4574,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "144123:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "144117:27:0",
                  "typeName": {
                    "id": 4575,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "144136:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 4579,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4577,
                    "name": "Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4572,
                    "src": "144155:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Address_$4572",
                      "typeString": "library Address"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "144149:26:0",
                  "typeName": {
                    "id": 4578,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "144167:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                },
                {
                  "body": {
                    "id": 4600,
                    "nodeType": "Block",
                    "src": "144253:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4589,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4581,
                              "src": "144283:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4592,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4581,
                                      "src": "144313:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4593,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transfer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 26,
                                    "src": "144313:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4594,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "144313:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4595,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4583,
                                  "src": "144338:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4596,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4585,
                                  "src": "144342:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4590,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "144290:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "144290:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4597,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "144290:58:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4588,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "144263:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "144263:86:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4599,
                        "nodeType": "ExpressionStatement",
                        "src": "144263:86:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4601,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4586,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4581,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4601,
                        "src": "144203:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4580,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "144203:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4583,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4601,
                        "src": "144217:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4582,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144217:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4585,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4601,
                        "src": "144229:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4584,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "144229:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "144202:41:0"
                  },
                  "returnParameters": {
                    "id": 4587,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "144253:0:0"
                  },
                  "scope": 4780,
                  "src": "144181:175:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4625,
                    "nodeType": "Block",
                    "src": "144452:113:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4613,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4603,
                              "src": "144482:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4616,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4603,
                                      "src": "144512:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "transferFrom",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 58,
                                    "src": "144512:18:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "144512:27:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4619,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4605,
                                  "src": "144541:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4620,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4607,
                                  "src": "144547:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4621,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4609,
                                  "src": "144551:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4614,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "144489:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4615,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "144489:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "144489:68:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4612,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "144462:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "144462:96:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4624,
                        "nodeType": "ExpressionStatement",
                        "src": "144462:96:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4626,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4610,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4603,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144388:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4602,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "144388:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4605,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144402:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4604,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144402:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4607,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144416:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4606,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144416:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4609,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4626,
                        "src": "144428:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4608,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "144428:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "144387:55:0"
                  },
                  "returnParameters": {
                    "id": 4611,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "144452:0:0"
                  },
                  "scope": 4780,
                  "src": "144362:203:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4668,
                    "nodeType": "Block",
                    "src": "144901:537:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 4637,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4633,
                                      "src": "145190:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 4638,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "145199:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "145190:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 4640,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "145189:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4650,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "id": 4645,
                                              "name": "this",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -28,
                                              "src": "145230:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                                "typeString": "library SafeERC20"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                                "typeString": "library SafeERC20"
                                              }
                                            ],
                                            "id": 4644,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "145222:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_address_$",
                                              "typeString": "type(address)"
                                            },
                                            "typeName": {
                                              "id": 4643,
                                              "name": "address",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "145222:7:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": null,
                                                "typeString": null
                                              }
                                            }
                                          },
                                          "id": 4646,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "typeConversion",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "145222:13:0",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "id": 4647,
                                          "name": "spender",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4631,
                                          "src": "145237:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4641,
                                          "name": "token",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4629,
                                          "src": "145206:5:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$77",
                                            "typeString": "contract IERC20"
                                          }
                                        },
                                        "id": 4642,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "allowance",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36,
                                        "src": "145206:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                          "typeString": "function (address,address) view external returns (uint256)"
                                        }
                                      },
                                      "id": 4648,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "145206:39:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 4649,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "145249:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "145206:44:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 4651,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "145205:46:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "145189:62:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
                              "id": 4653,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "145265:56:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                              },
                              "value": "SafeERC20: approve from non-zero to non-zero allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
                                "typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
                              }
                            ],
                            "id": 4636,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "145181:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145181:150:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4655,
                        "nodeType": "ExpressionStatement",
                        "src": "145181:150:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4657,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4629,
                              "src": "145361:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4660,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4629,
                                      "src": "145391:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4661,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "145391:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4662,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "145391:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4663,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4631,
                                  "src": "145415:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4664,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4633,
                                  "src": "145424:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4658,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "145368:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "145368:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4665,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145368:62:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4656,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "145341:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145341:90:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4667,
                        "nodeType": "ExpressionStatement",
                        "src": "145341:90:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4627,
                    "nodeType": "StructuredDocumentation",
                    "src": "144571:249:0",
                    "text": " @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."
                  },
                  "id": 4669,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeApprove",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4629,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4669,
                        "src": "144846:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4628,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "144846:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4631,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4669,
                        "src": "144860:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4630,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "144860:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4633,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4669,
                        "src": "144877:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4632,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "144877:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "144845:46:0"
                  },
                  "returnParameters": {
                    "id": 4635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "144901:0:0"
                  },
                  "scope": 4780,
                  "src": "144825:613:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4704,
                    "nodeType": "Block",
                    "src": "145530:197:0",
                    "statements": [
                      {
                        "assignments": [
                          4679
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4679,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4704,
                            "src": "145540:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4678,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "145540:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4691,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4689,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4675,
                              "src": "145607:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4684,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "145587:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    ],
                                    "id": 4683,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "145579:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4682,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "145579:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4685,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "145579:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4686,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4673,
                                  "src": "145594:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4680,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4671,
                                  "src": "145563:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 4681,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "145563:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address,address) view external returns (uint256)"
                                }
                              },
                              "id": 4687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145563:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4688,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "145563:43:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145563:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "145540:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4693,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4671,
                              "src": "145643:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4696,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4671,
                                      "src": "145673:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4697,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "145673:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4698,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "145673:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4699,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4673,
                                  "src": "145697:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4700,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4679,
                                  "src": "145706:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4694,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "145650:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4695,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "145650:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145650:69:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4692,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "145623:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145623:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4703,
                        "nodeType": "ExpressionStatement",
                        "src": "145623:97:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4705,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeIncreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4676,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4671,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4705,
                        "src": "145475:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4670,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "145475:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4673,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4705,
                        "src": "145489:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4672,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "145489:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4675,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4705,
                        "src": "145506:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4674,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "145506:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "145474:46:0"
                  },
                  "returnParameters": {
                    "id": 4677,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "145530:0:0"
                  },
                  "scope": 4780,
                  "src": "145444:283:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4741,
                    "nodeType": "Block",
                    "src": "145819:242:0",
                    "statements": [
                      {
                        "assignments": [
                          4715
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4715,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4741,
                            "src": "145829:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4714,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "145829:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4728,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4725,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4711,
                              "src": "145896:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                              "id": 4726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "145903:43:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                              },
                              "value": "SafeERC20: decreased allowance below zero"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
                                "typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4720,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "145876:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_SafeERC20_$4780",
                                        "typeString": "library SafeERC20"
                                      }
                                    ],
                                    "id": 4719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "145868:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 4718,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "145868:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 4721,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "145868:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4722,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4709,
                                  "src": "145883:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4716,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4707,
                                  "src": "145852:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 4717,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "allowance",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "145852:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address,address) view external returns (uint256)"
                                }
                              },
                              "id": 4723,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145852:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 756,
                            "src": "145852:43:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                            }
                          },
                          "id": 4727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145852:95:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "145829:118:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4730,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4707,
                              "src": "145977:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4733,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4707,
                                      "src": "146007:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$77",
                                        "typeString": "contract IERC20"
                                      }
                                    },
                                    "id": 4734,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "approve",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 46,
                                    "src": "146007:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                      "typeString": "function (address,uint256) external returns (bool)"
                                    }
                                  },
                                  "id": 4735,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "selector",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "146007:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4736,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4709,
                                  "src": "146031:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4737,
                                  "name": "newAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4715,
                                  "src": "146040:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4731,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "145984:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodeWithSelector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "145984:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function (bytes4) pure returns (bytes memory)"
                                }
                              },
                              "id": 4738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "145984:69:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 4729,
                            "name": "_callOptionalReturn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4779,
                            "src": "145957:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (contract IERC20,bytes memory)"
                            }
                          },
                          "id": 4739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "145957:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4740,
                        "nodeType": "ExpressionStatement",
                        "src": "145957:97:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 4742,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeDecreaseAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4712,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4707,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4742,
                        "src": "145764:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4706,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "145764:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4709,
                        "mutability": "mutable",
                        "name": "spender",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4742,
                        "src": "145778:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4708,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "145778:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4711,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4742,
                        "src": "145795:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4710,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "145795:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "145763:46:0"
                  },
                  "returnParameters": {
                    "id": 4713,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "145819:0:0"
                  },
                  "scope": 4780,
                  "src": "145733:328:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4778,
                    "nodeType": "Block",
                    "src": "146514:681:0",
                    "statements": [
                      {
                        "assignments": [
                          4751
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4751,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4778,
                            "src": "146863:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 4750,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "146863:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4760,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4757,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4747,
                              "src": "146917:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
                              "id": 4758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "146923:34:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                "typeString": "literal_string \"SafeERC20: low-level call failed\""
                              },
                              "value": "SafeERC20: low-level call failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
                                "typeString": "literal_string \"SafeERC20: low-level call failed\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4754,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4745,
                                  "src": "146897:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 4753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "146889:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4752,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "146889:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 4755,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "146889:14:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 4756,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4419,
                            "src": "146889:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                              "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                            }
                          },
                          "id": 4759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "146889:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "146863:95:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4761,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4751,
                              "src": "146972:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 4762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "146972:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "146992:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "146972:21:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4777,
                        "nodeType": "IfStatement",
                        "src": "146968:221:0",
                        "trueBody": {
                          "id": 4776,
                          "nodeType": "Block",
                          "src": "146995:194:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 4768,
                                        "name": "returndata",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4751,
                                        "src": "147112:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "argumentTypes": null,
                                        "components": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4770,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "147125:4:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            },
                                            "typeName": {
                                              "id": 4769,
                                              "name": "bool",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "147125:4:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": null,
                                                "typeString": null
                                              }
                                            }
                                          }
                                        ],
                                        "id": 4771,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "147124:6:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_type$_t_bool_$",
                                          "typeString": "type(bool)"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4766,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "147101:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 4767,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "decode",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "147101:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 4772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "147101:30:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
                                    "id": 4773,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "147133:44:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                      "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                    },
                                    "value": "SafeERC20: ERC20 operation did not succeed"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
                                      "typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
                                    }
                                  ],
                                  "id": 4765,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "147093:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 4774,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "147093:85:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 4775,
                              "nodeType": "ExpressionStatement",
                              "src": "147093:85:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4743,
                    "nodeType": "StructuredDocumentation",
                    "src": "146067:372:0",
                    "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."
                  },
                  "id": 4779,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_callOptionalReturn",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4745,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4779,
                        "src": "146473:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4744,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "146473:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4747,
                        "mutability": "mutable",
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4779,
                        "src": "146487:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4746,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "146487:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "146472:33:0"
                  },
                  "returnParameters": {
                    "id": 4749,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "146514:0:0"
                  },
                  "scope": 4780,
                  "src": "146444:751:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 7772,
              "src": "144093:3104:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4781,
                "nodeType": "StructuredDocumentation",
                "src": "148271:67:0",
                "text": "@title PoolLib is a library of utility functions used by Pool."
              },
              "fullyImplemented": true,
              "id": 5865,
              "linearizedBaseContracts": [
                5865
              ],
              "name": "PoolLib",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 4784,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4782,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 878,
                    "src": "148367:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$878",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "148361:27:0",
                  "typeName": {
                    "id": 4783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "148380:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "id": 4787,
                  "libraryName": {
                    "contractScope": null,
                    "id": 4785,
                    "name": "SafeERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4780,
                    "src": "148399:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeERC20_$4780",
                      "typeString": "library SafeERC20"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "148393:27:0",
                  "typeName": {
                    "contractScope": null,
                    "id": 4786,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "148413:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": true,
                  "functionSelector": "33a581d2",
                  "id": 4794,
                  "mutability": "constant",
                  "name": "MAX_UINT256",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5865,
                  "src": "148426:49:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "148426:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "-",
                        "prefix": true,
                        "src": "148472:2:0",
                        "subExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 4791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "148473:1:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_minus_1_by_1",
                          "typeString": "int_const -1"
                        }
                      ],
                      "id": 4790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "148464:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": {
                        "id": 4789,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "148464:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 4793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "148464:11:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "6a146024",
                  "id": 4799,
                  "mutability": "constant",
                  "name": "WAD",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5865,
                  "src": "148481:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4795,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "148481:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    },
                    "id": 4798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 4796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "148519:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3138",
                      "id": 4797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "148525:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_18_by_1",
                        "typeString": "int_const 18"
                      },
                      "value": "18"
                    },
                    "src": "148519:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "174a5be4",
                  "id": 4802,
                  "mutability": "constant",
                  "name": "DL_FACTORY",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5865,
                  "src": "148533:39:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4800,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "148533:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 4801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "148571:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "public"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 4810,
                  "name": "LoanFunded",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4809,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4804,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4810,
                        "src": "148649:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4803,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "148649:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4806,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "debtLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4810,
                        "src": "148671:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4805,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "148671:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4808,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "amountFunded",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4810,
                        "src": "148691:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4807,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "148691:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "148648:64:0"
                  },
                  "src": "148624:89:0"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 4816,
                  "name": "DepositDateUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4812,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "liquidityProvider",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4816,
                        "src": "148743:33:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "148743:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4814,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "depositDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4816,
                        "src": "148778:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4813,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "148778:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "148742:56:0"
                  },
                  "src": "148718:81:0"
                },
                {
                  "body": {
                    "id": 4881,
                    "nodeType": "Block",
                    "src": "149618:511:0",
                    "statements": [
                      {
                        "assignments": [
                          4831
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4831,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4881,
                            "src": "149628:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4830,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "149628:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4835,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4833,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4823,
                              "src": "149650:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 4832,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "149643:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 4834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149643:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "149628:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4839,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4821,
                                  "src": "149710:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4837,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4819,
                                  "src": "149680:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 4838,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isValidLiquidityAsset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2577,
                                "src": "149680:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view external returns (bool)"
                                }
                              },
                              "id": 4840,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "149680:45:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f4c49515f4153534554",
                              "id": 4841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "149727:21:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_9b8b63b5878fdb07e6ad33728b6c71ada5bbdd2a67c51849ce807aff8f8ea75c",
                                "typeString": "literal_string \"P:INVALID_LIQ_ASSET\""
                              },
                              "value": "P:INVALID_LIQ_ASSET"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_9b8b63b5878fdb07e6ad33728b6c71ada5bbdd2a67c51849ce807aff8f8ea75c",
                                "typeString": "literal_string \"P:INVALID_LIQ_ASSET\""
                              }
                            ],
                            "id": 4836,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "149672:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4842,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149672:77:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4843,
                        "nodeType": "ExpressionStatement",
                        "src": "149672:77:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4847,
                                    "name": "delegateFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4827,
                                    "src": "149782:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4845,
                                    "name": "stakingFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4825,
                                    "src": "149767:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4846,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "149767:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "149767:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31305f303030",
                                "id": 4849,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "149798:6:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "value": "10_000"
                              },
                              "src": "149767:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f46454553",
                              "id": 4851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "149814:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_88eb5ba75690dea84c695e943758998aee28affff15ee3741c64f20673db6e2a",
                                "typeString": "literal_string \"P:INVALID_FEES\""
                              },
                              "value": "P:INVALID_FEES"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_88eb5ba75690dea84c695e943758998aee28affff15ee3741c64f20673db6e2a",
                                "typeString": "literal_string \"P:INVALID_FEES\""
                              }
                            ],
                            "id": 4844,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "149759:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4852,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149759:72:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4853,
                        "nodeType": "ExpressionStatement",
                        "src": "149759:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 4877,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 4873,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 4868,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 4859,
                                            "name": "stakeAsset",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4823,
                                            "src": "149898:10:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 4858,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "149890:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 4857,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "149890:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 4860,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "149890:19:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4855,
                                        "name": "globals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4819,
                                        "src": "149862:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                          "typeString": "contract IMapleGlobals"
                                        }
                                      },
                                      "id": 4856,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "isValidBalancerPool",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2609,
                                      "src": "149862:27:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                        "typeString": "function (address) view external returns (bool)"
                                      }
                                    },
                                    "id": 4861,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "149862:48:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "arguments": [],
                                        "expression": {
                                          "argumentTypes": [],
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 4864,
                                            "name": "globals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4819,
                                            "src": "149940:7:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                              "typeString": "contract IMapleGlobals"
                                            }
                                          },
                                          "id": 4865,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mpl",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 2473,
                                          "src": "149940:11:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_external_pure$__$returns$_t_address_$",
                                            "typeString": "function () pure external returns (address)"
                                          }
                                        },
                                        "id": 4866,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "149940:13:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4862,
                                        "name": "bPool",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4831,
                                        "src": "149926:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IBPool_$4312",
                                          "typeString": "contract IBPool"
                                        }
                                      },
                                      "id": 4863,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "isBound",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4211,
                                      "src": "149926:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                        "typeString": "function (address) view external returns (bool)"
                                      }
                                    },
                                    "id": 4867,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "149926:28:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "149862:92:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4871,
                                      "name": "liquidityAsset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4821,
                                      "src": "150004:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4869,
                                      "name": "bPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4831,
                                      "src": "149990:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IBPool_$4312",
                                        "typeString": "contract IBPool"
                                      }
                                    },
                                    "id": 4870,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "isBound",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4211,
                                    "src": "149990:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                      "typeString": "function (address) view external returns (bool)"
                                    }
                                  },
                                  "id": 4872,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "149990:29:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "149862:157:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4874,
                                    "name": "bPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4831,
                                    "src": "150054:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IBPool_$4312",
                                      "typeString": "contract IBPool"
                                    }
                                  },
                                  "id": 4875,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isFinalized",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4204,
                                  "src": "150054:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                    "typeString": "function () view external returns (bool)"
                                  }
                                },
                                "id": 4876,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "150054:19:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "149862:211:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f42414c414e4345525f504f4f4c",
                              "id": 4878,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "150087:25:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d1dd8f0bd83aad99d140eea19042a10daddebb94430f6d5c593114c14a9ccfcb",
                                "typeString": "literal_string \"P:INVALID_BALANCER_POOL\""
                              },
                              "value": "P:INVALID_BALANCER_POOL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d1dd8f0bd83aad99d140eea19042a10daddebb94430f6d5c593114c14a9ccfcb",
                                "typeString": "literal_string \"P:INVALID_BALANCER_POOL\""
                              }
                            ],
                            "id": 4854,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "149841:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "149841:281:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4880,
                        "nodeType": "ExpressionStatement",
                        "src": "149841:281:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4817,
                    "nodeType": "StructuredDocumentation",
                    "src": "148944:475:0",
                    "text": "@dev   Conducts sanity checks for Pools in the constructor.\n@param globals        The instance of a MapleGlobals.\n@param liquidityAsset The asset used by Pool for liquidity to fund loans.\n@param stakeAsset     The asset escrowed in StakeLocker.\n@param stakingFee     The fee that the Stakers earn on interest, in basis points.\n@param delegateFee    The fee that the Pool Delegate earns on interest, in basis points."
                  },
                  "functionSelector": "14985168",
                  "id": 4882,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "poolSanityChecks",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4828,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4819,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149459:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4818,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "149459:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4821,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149490:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4820,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "149490:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4823,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149522:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4822,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "149522:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4825,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149550:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4824,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "149550:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4827,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4882,
                        "src": "149578:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4826,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "149578:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "149449:154:0"
                  },
                  "returnParameters": {
                    "id": 4829,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "149618:0:0"
                  },
                  "scope": 5865,
                  "src": "149424:705:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 4996,
                    "nodeType": "Block",
                    "src": "151043:932:0",
                    "statements": [
                      {
                        "assignments": [
                          4903
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4903,
                            "mutability": "mutable",
                            "name": "globals",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4996,
                            "src": "151053:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                              "typeString": "contract IMapleGlobals"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4902,
                              "name": "IMapleGlobals",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 2870,
                              "src": "151053:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4911,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4906,
                                      "name": "superFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4891,
                                      "src": "151104:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4905,
                                    "name": "ILoanFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3092,
                                    "src": "151091:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ILoanFactory_$3092_$",
                                      "typeString": "type(contract ILoanFactory)"
                                    }
                                  },
                                  "id": 4907,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "151091:26:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ILoanFactory_$3092",
                                    "typeString": "contract ILoanFactory"
                                  }
                                },
                                "id": 4908,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "globals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3017,
                                "src": "151091:34:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function () view external returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 4909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151091:36:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            ],
                            "id": 4904,
                            "name": "IMapleGlobals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2870,
                            "src": "151077:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMapleGlobals_$2870_$",
                              "typeString": "type(contract IMapleGlobals)"
                            }
                          },
                          "id": 4910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151077:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "151053:75:0"
                      },
                      {
                        "assignments": [
                          4913
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4913,
                            "mutability": "mutable",
                            "name": "loanFactory",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4996,
                            "src": "151138:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 4912,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "151138:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4919,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4915,
                                  "name": "loan",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4895,
                                  "src": "151168:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4914,
                                "name": "ILoan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 520,
                                "src": "151162:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ILoan_$520_$",
                                  "typeString": "type(contract ILoan)"
                                }
                              },
                              "id": 4916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151162:11:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILoan_$520",
                                "typeString": "contract ILoan"
                              }
                            },
                            "id": 4917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "superFactory",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 302,
                            "src": "151162:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 4918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151162:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "151138:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4923,
                                  "name": "loanFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4913,
                                  "src": "151258:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4921,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4903,
                                  "src": "151231:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 4922,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isValidLoanFactory",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2643,
                                "src": "151231:26:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view external returns (bool)"
                                }
                              },
                              "id": 4924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151231:39:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f4c46",
                              "id": 4925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "151295:14:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_620d1b1dfa2ab14843bf9e96ecfd606cb302db28ca9b5542dcda3b428bf8886e",
                                "typeString": "literal_string \"P:INVALID_LF\""
                              },
                              "value": "P:INVALID_LF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_620d1b1dfa2ab14843bf9e96ecfd606cb302db28ca9b5542dcda3b428bf8886e",
                                "typeString": "literal_string \"P:INVALID_LF\""
                              }
                            ],
                            "id": 4920,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "151223:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4926,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151223:87:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4927,
                        "nodeType": "ExpressionStatement",
                        "src": "151223:87:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4933,
                                  "name": "loan",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4895,
                                  "src": "151361:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4930,
                                      "name": "loanFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4913,
                                      "src": "151341:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4929,
                                    "name": "ILoanFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3092,
                                    "src": "151328:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ILoanFactory_$3092_$",
                                      "typeString": "type(contract ILoanFactory)"
                                    }
                                  },
                                  "id": 4931,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "151328:25:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ILoanFactory_$3092",
                                    "typeString": "contract ILoanFactory"
                                  }
                                },
                                "id": 4932,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isLoan",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3039,
                                "src": "151328:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address) view external returns (bool)"
                                }
                              },
                              "id": 4934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151328:38:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f4c",
                              "id": 4935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "151392:13:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8ab01fbae58364997fb6e48abf7748e5280e995b4bcd2b59610168c694f73cb7",
                                "typeString": "literal_string \"P:INVALID_L\""
                              },
                              "value": "P:INVALID_L"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8ab01fbae58364997fb6e48abf7748e5280e995b4bcd2b59610168c694f73cb7",
                                "typeString": "literal_string \"P:INVALID_L\""
                              }
                            ],
                            "id": 4928,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "151320:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151320:86:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4937,
                        "nodeType": "ExpressionStatement",
                        "src": "151320:86:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4941,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4891,
                                  "src": "151450:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4942,
                                  "name": "dlFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4897,
                                  "src": "151464:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4943,
                                  "name": "DL_FACTORY",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4802,
                                  "src": "151475:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4939,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4903,
                                  "src": "151424:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 4940,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "isValidSubFactory",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2851,
                                "src": "151424:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint8_$returns$_t_bool_$",
                                  "typeString": "function (address,address,uint8) view external returns (bool)"
                                }
                              },
                              "id": 4944,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151424:62:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f444c46",
                              "id": 4945,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "151488:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_61be5fb441c61e33fd0f254579efe1503cb9e300437aacf115dff03bed1fc86f",
                                "typeString": "literal_string \"P:INVALID_DLF\""
                              },
                              "value": "P:INVALID_DLF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_61be5fb441c61e33fd0f254579efe1503cb9e300437aacf115dff03bed1fc86f",
                                "typeString": "literal_string \"P:INVALID_DLF\""
                              }
                            ],
                            "id": 4938,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "151416:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4946,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151416:88:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4947,
                        "nodeType": "ExpressionStatement",
                        "src": "151416:88:0"
                      },
                      {
                        "assignments": [
                          4949
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4949,
                            "mutability": "mutable",
                            "name": "debtLocker",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4996,
                            "src": "151515:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 4948,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "151515:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4955,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 4950,
                              "name": "debtLockers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4889,
                              "src": "151536:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                "typeString": "mapping(address => mapping(address => address))"
                              }
                            },
                            "id": 4952,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 4951,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4895,
                              "src": "151548:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "151536:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            }
                          },
                          "id": 4954,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4953,
                            "name": "dlFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4897,
                            "src": "151554:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "151536:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "151515:49:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4956,
                            "name": "debtLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4949,
                            "src": "151654:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 4959,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "151676:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 4958,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "151668:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4957,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "151668:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 4960,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "151668:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "151654:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4980,
                        "nodeType": "IfStatement",
                        "src": "151650:168:0",
                        "trueBody": {
                          "id": 4979,
                          "nodeType": "Block",
                          "src": "151680:138:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4969,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4962,
                                  "name": "debtLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4949,
                                  "src": "151694:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4967,
                                      "name": "loan",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4895,
                                      "src": "151747:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 4964,
                                          "name": "dlFactory",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4897,
                                          "src": "151726:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 4963,
                                        "name": "IDebtLockerFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 640,
                                        "src": "151707:18:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_IDebtLockerFactory_$640_$",
                                          "typeString": "type(contract IDebtLockerFactory)"
                                        }
                                      },
                                      "id": 4965,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "151707:29:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IDebtLockerFactory_$640",
                                        "typeString": "contract IDebtLockerFactory"
                                      }
                                    },
                                    "id": 4966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "newLocker",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 639,
                                    "src": "151707:39:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_address_$",
                                      "typeString": "function (address) external returns (address)"
                                    }
                                  },
                                  "id": 4968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "151707:45:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "151694:58:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 4970,
                              "nodeType": "ExpressionStatement",
                              "src": "151694:58:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4977,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 4971,
                                      "name": "debtLockers",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4889,
                                      "src": "151766:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                        "typeString": "mapping(address => mapping(address => address))"
                                      }
                                    },
                                    "id": 4974,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 4972,
                                      "name": "loan",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4895,
                                      "src": "151778:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "151766:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                      "typeString": "mapping(address => address)"
                                    }
                                  },
                                  "id": 4975,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 4973,
                                    "name": "dlFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4897,
                                    "src": "151784:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "151766:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 4976,
                                  "name": "debtLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4949,
                                  "src": "151797:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "151766:41:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 4978,
                              "nodeType": "ExpressionStatement",
                              "src": "151766:41:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4985,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4895,
                              "src": "151897:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4986,
                              "name": "debtLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4949,
                              "src": "151903:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4987,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4899,
                              "src": "151915:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4982,
                                  "name": "liquidityLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4893,
                                  "src": "151871:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4981,
                                "name": "ILiquidityLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2902,
                                "src": "151854:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ILiquidityLocker_$2902_$",
                                  "typeString": "type(contract ILiquidityLocker)"
                                }
                              },
                              "id": 4983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "151854:33:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILiquidityLocker_$2902",
                                "typeString": "contract ILiquidityLocker"
                              }
                            },
                            "id": 4984,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fundLoan",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2901,
                            "src": "151854:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) external"
                            }
                          },
                          "id": 4988,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151854:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4989,
                        "nodeType": "ExpressionStatement",
                        "src": "151854:65:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4991,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4895,
                              "src": "151946:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4992,
                              "name": "debtLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4949,
                              "src": "151952:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4993,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4899,
                              "src": "151964:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4990,
                            "name": "LoanFunded",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4810,
                            "src": "151935:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 4994,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "151935:33:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4995,
                        "nodeType": "EmitStatement",
                        "src": "151930:38:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4883,
                    "nodeType": "StructuredDocumentation",
                    "src": "150135:660:0",
                    "text": "@dev   Funds a Loan for an amount, utilizing the supplied DebtLockerFactory for DebtLockers. \n@dev   It emits a `LoanFunded` event. \n@param debtLockers     The mapping reference that contains the DebtLocker contract address corresponding to the DebtLockerFactory and Loan.\n@param superFactory    The address of the PoolFactory.\n@param liquidityLocker The address of the LiquidityLocker contract attached with this Pool.\n@param loan            The address of the Loan to fund.\n@param dlFactory       The DebtLockerFactory to utilize.\n@param amt             The amount to fund the Loan."
                  },
                  "functionSelector": "fbecb171",
                  "id": 4997,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4900,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4889,
                        "mutability": "mutable",
                        "name": "debtLockers",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150827:67:0",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                          "typeString": "mapping(address => mapping(address => address))"
                        },
                        "typeName": {
                          "id": 4888,
                          "keyType": {
                            "id": 4884,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "150835:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "150827:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                            "typeString": "mapping(address => mapping(address => address))"
                          },
                          "valueType": {
                            "id": 4887,
                            "keyType": {
                              "id": 4885,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "150854:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "Mapping",
                            "src": "150846:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                              "typeString": "mapping(address => address)"
                            },
                            "valueType": {
                              "id": 4886,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "150865:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4891,
                        "mutability": "mutable",
                        "name": "superFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150904:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4890,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150904:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4893,
                        "mutability": "mutable",
                        "name": "liquidityLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150934:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4892,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150934:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4895,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150967:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4894,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150967:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4897,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "150989:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4896,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "150989:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4899,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 4997,
                        "src": "151016:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4898,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "151016:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "150817:216:0"
                  },
                  "returnParameters": {
                    "id": 4901,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "151043:0:0"
                  },
                  "scope": 5865,
                  "src": "150800:1175:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5126,
                    "nodeType": "Block",
                    "src": "153045:1404:0",
                    "statements": [
                      {
                        "assignments": [
                          5016
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5016,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153056:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5015,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "153056:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5020,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5018,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5004,
                              "src": "153078:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5017,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "153071:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153071:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153056:33:0"
                      },
                      {
                        "assignments": [
                          5022
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5022,
                            "mutability": "mutable",
                            "name": "availableSwapOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153222:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5021,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "153222:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5031,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5024,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5004,
                              "src": "153271:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5027,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5000,
                                  "src": "153291:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 5026,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153283:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5025,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153283:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153283:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5029,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5002,
                              "src": "153308:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5023,
                            "name": "getSwapOutValueLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5587,
                            "src": "153249:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address,address) view returns (uint256)"
                            }
                          },
                          "id": 5030,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153249:71:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153222:98:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5038,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "153409:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                ],
                                "id": 5037,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153401:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5036,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153401:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5039,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153401:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5042,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5002,
                                  "src": "153432:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5040,
                                  "name": "bPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5016,
                                  "src": "153416:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBPool_$4312",
                                    "typeString": "contract IBPool"
                                  }
                                },
                                "id": 5041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4191,
                                "src": "153416:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5043,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153416:28:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5033,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5002,
                                  "src": "153383:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5032,
                                "name": "IStakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4104,
                                "src": "153370:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IStakeLocker_$4104_$",
                                  "typeString": "type(contract IStakeLocker)"
                                }
                              },
                              "id": 5034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153370:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeLocker_$4104",
                                "typeString": "contract IStakeLocker"
                              }
                            },
                            "id": 5035,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "pull",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4030,
                            "src": "153370:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 5044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153370:75:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5045,
                        "nodeType": "ExpressionStatement",
                        "src": "153370:75:0"
                      },
                      {
                        "assignments": [
                          5047
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5047,
                            "mutability": "mutable",
                            "name": "preBurnLiquidityAssetBal",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153531:32:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5046,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "153531:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5055,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5052,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "153599:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                ],
                                "id": 5051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153591:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5050,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153591:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153591:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5048,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5000,
                              "src": "153566:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16,
                            "src": "153566:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153566:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153531:74:0"
                      },
                      {
                        "assignments": [
                          5057
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5057,
                            "mutability": "mutable",
                            "name": "preBurnBptBal",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5126,
                            "src": "153615:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5056,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "153615:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5065,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5062,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "153674:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_PoolLib_$5865",
                                    "typeString": "library PoolLib"
                                  }
                                ],
                                "id": 5061,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153666:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5060,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153666:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5063,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153666:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5058,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5016,
                              "src": "153650:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5059,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4191,
                            "src": "153650:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153650:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "153615:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5071,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5000,
                                  "src": "153817:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 5070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "153809:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5069,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "153809:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 5072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "153809:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5075,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5073,
                                  "name": "availableSwapOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5022,
                                  "src": "153846:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 5074,
                                  "name": "defaultSuffered",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5006,
                                  "src": "153866:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "153846:35:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "argumentTypes": null,
                                "id": 5077,
                                "name": "availableSwapOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5022,
                                "src": "153902:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5078,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "153846:72:0",
                              "trueExpression": {
                                "argumentTypes": null,
                                "id": 5076,
                                "name": "defaultSuffered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5006,
                                "src": "153884:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5079,
                              "name": "preBurnBptBal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5057,
                              "src": "153975:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5066,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5016,
                              "src": "153766:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "exitswapExternAmountOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4311,
                            "src": "153766:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,uint256,uint256) external returns (uint256)"
                            }
                          },
                          "id": 5080,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "153766:232:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5081,
                        "nodeType": "ExpressionStatement",
                        "src": "153766:232:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5082,
                            "name": "postBurnBptBal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5011,
                            "src": "154058:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5087,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "154099:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_PoolLib_$5865",
                                      "typeString": "library PoolLib"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_PoolLib_$5865",
                                      "typeString": "library PoolLib"
                                    }
                                  ],
                                  "id": 5086,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "154091:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5085,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "154091:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5088,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "154091:13:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5083,
                                "name": "bPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5016,
                                "src": "154075:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBPool_$4312",
                                  "typeString": "contract IBPool"
                                }
                              },
                              "id": 5084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4191,
                              "src": "154075:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 5089,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "154075:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "154058:47:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5091,
                        "nodeType": "ExpressionStatement",
                        "src": "154058:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5092,
                            "name": "bptsBurned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5009,
                            "src": "154115:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5095,
                                "name": "postBurnBptBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5011,
                                "src": "154150:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5093,
                                "name": "preBurnBptBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5057,
                                "src": "154132:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5094,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "154132:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "154132:33:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "154115:50:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5098,
                        "nodeType": "ExpressionStatement",
                        "src": "154115:50:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5102,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5002,
                              "src": "154190:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5103,
                              "name": "postBurnBptBal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5011,
                              "src": "154203:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5099,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5016,
                              "src": "154175:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5101,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4165,
                            "src": "154175:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 5104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "154175:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5105,
                        "nodeType": "ExpressionStatement",
                        "src": "154175:43:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5106,
                            "name": "liquidityAssetRecoveredFromBurn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5013,
                            "src": "154228:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5115,
                                "name": "preBurnLiquidityAssetBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5047,
                                "src": "154306:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5111,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -28,
                                        "src": "154295:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_PoolLib_$5865",
                                          "typeString": "library PoolLib"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_PoolLib_$5865",
                                          "typeString": "library PoolLib"
                                        }
                                      ],
                                      "id": 5110,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "154287:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 5109,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "154287:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    },
                                    "id": 5112,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "154287:13:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5107,
                                    "name": "liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5000,
                                    "src": "154262:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$77",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 5108,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "balanceOf",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 16,
                                  "src": "154262:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view external returns (uint256)"
                                  }
                                },
                                "id": 5113,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "154262:39:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5114,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "154262:43:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5116,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "154262:69:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "154228:103:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5118,
                        "nodeType": "ExpressionStatement",
                        "src": "154228:103:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5123,
                              "name": "bptsBurned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5009,
                              "src": "154380:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5120,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5002,
                                  "src": "154354:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5119,
                                "name": "IStakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4104,
                                "src": "154341:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IStakeLocker_$4104_$",
                                  "typeString": "type(contract IStakeLocker)"
                                }
                              },
                              "id": 5121,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "154341:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeLocker_$4104",
                                "typeString": "contract IStakeLocker"
                              }
                            },
                            "id": 5122,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateLosses",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4036,
                            "src": "154341:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) external"
                            }
                          },
                          "id": 5124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "154341:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5125,
                        "nodeType": "ExpressionStatement",
                        "src": "154341:50:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4998,
                    "nodeType": "StructuredDocumentation",
                    "src": "151981:739:0",
                    "text": "@dev    Helper function used by Pool `claim` function, for when if a default has occurred.\n@param  liquidityAsset                  The IERC20 of Liquidity Asset.\n@param  stakeLocker                     The address of StakeLocker.\n@param  stakeAsset                      The address of BPTs.\n@param  defaultSuffered                 The amount of shortfall in defaulted Loan after liquidation.\n@return bptsBurned                      The amount of BPTs burned to cover shortfall.\n@return postBurnBptBal                  The amount of BPTs returned to StakeLocker after burn.\n@return liquidityAssetRecoveredFromBurn The amount of Liquidity Asset recovered from burn."
                  },
                  "functionSelector": "0715b090",
                  "id": 5127,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "handleDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5007,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5000,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152757:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$77",
                          "typeString": "contract IERC20"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 4999,
                          "name": "IERC20",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 77,
                          "src": "152757:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5002,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152789:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5001,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "152789:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5004,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152818:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5003,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "152818:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5006,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152846:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5005,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152846:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "152747:128:0"
                  },
                  "returnParameters": {
                    "id": 5014,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5009,
                        "mutability": "mutable",
                        "name": "bptsBurned",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152923:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5008,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152923:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5011,
                        "mutability": "mutable",
                        "name": "postBurnBptBal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152955:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5010,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152955:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5013,
                        "mutability": "mutable",
                        "name": "liquidityAssetRecoveredFromBurn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5127,
                        "src": "152991:39:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5012,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "152991:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "152909:131:0"
                  },
                  "scope": 5865,
                  "src": "152725:1724:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5212,
                    "nodeType": "Block",
                    "src": "155871:558:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5147,
                            "name": "poolDelegatePortion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5139,
                            "src": "155881:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5158,
                                  "name": "claimInfo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5132,
                                  "src": "155949:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                    "typeString": "uint256[7] calldata"
                                  }
                                },
                                "id": 5160,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "33",
                                  "id": 5159,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "155959:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "155949:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "31305f303030",
                                    "id": 5155,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "155937:6:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10000_by_1",
                                      "typeString": "int_const 10000"
                                    },
                                    "value": "10_000"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_10000_by_1",
                                      "typeString": "int_const 10000"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5152,
                                        "name": "delegateFee",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5134,
                                        "src": "155920:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 5148,
                                          "name": "claimInfo",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5132,
                                          "src": "155903:9:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                            "typeString": "uint256[7] calldata"
                                          }
                                        },
                                        "id": 5150,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "31",
                                          "id": 5149,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "155913:1:0",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "155903:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5151,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 791,
                                      "src": "155903:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5153,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "155903:29:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5154,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 808,
                                  "src": "155903:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5156,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "155903:41:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "155903:45:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "155903:59:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "155881:81:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5163,
                        "nodeType": "ExpressionStatement",
                        "src": "155881:81:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5164,
                            "name": "stakeLockerPortion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5141,
                            "src": "156020:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31305f303030",
                                "id": 5172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "156075:6:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "value": "10_000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5169,
                                    "name": "stakingFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5136,
                                    "src": "156059:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5165,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156042:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5167,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 5166,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156052:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156042:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5168,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mul",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 791,
                                  "src": "156042:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5170,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156042:28:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "div",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 808,
                              "src": "156042:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "156042:40:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "156020:62:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5175,
                        "nodeType": "ExpressionStatement",
                        "src": "156020:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5190,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5176,
                            "name": "principalClaim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5143,
                            "src": "156149:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 5186,
                                  "name": "claimInfo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5132,
                                  "src": "156201:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                    "typeString": "uint256[7] calldata"
                                  }
                                },
                                "id": 5188,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "35",
                                  "id": 5187,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "156211:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_5_by_1",
                                    "typeString": "int_const 5"
                                  },
                                  "value": "5"
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "156201:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5181,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156183:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5183,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "34",
                                      "id": 5182,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156193:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156183:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5177,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156166:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5179,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "32",
                                      "id": 5178,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156176:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156166:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5180,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "156166:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5184,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156166:30:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5185,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "156166:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "156166:48:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "156149:65:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5191,
                        "nodeType": "ExpressionStatement",
                        "src": "156149:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5192,
                            "name": "interestClaim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5145,
                            "src": "156300:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5208,
                                "name": "stakeLockerPortion",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5141,
                                "src": "156381:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "31305f303030",
                                        "id": 5204,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "156368:6:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10000_by_1",
                                          "typeString": "int_const 10000"
                                        },
                                        "value": "10_000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_10000_by_1",
                                          "typeString": "int_const 10000"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5201,
                                            "name": "delegateFee",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5134,
                                            "src": "156351:11:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 5197,
                                              "name": "claimInfo",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5132,
                                              "src": "156334:9:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                                "typeString": "uint256[7] calldata"
                                              }
                                            },
                                            "id": 5199,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "hexValue": "31",
                                              "id": 5198,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "156344:1:0",
                                              "subdenomination": null,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "156334:12:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5200,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "mul",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 791,
                                          "src": "156334:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5202,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "156334:29:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5203,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "div",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 808,
                                      "src": "156334:33:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5205,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "156334:41:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 5193,
                                      "name": "claimInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5132,
                                      "src": "156317:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                                        "typeString": "uint256[7] calldata"
                                      }
                                    },
                                    "id": 5195,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 5194,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "156327:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "156317:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5196,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 728,
                                  "src": "156317:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5206,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156317:59:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5207,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "156317:63:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5209,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "156317:83:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "156300:100:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5211,
                        "nodeType": "ExpressionStatement",
                        "src": "156300:100:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5128,
                    "nodeType": "StructuredDocumentation",
                    "src": "154455:1061:0",
                    "text": "@dev    Calculates portions of claim from DebtLocker to be used by Pool `claim` function.\n@param  claimInfo           [0] => Total Claimed, \n[1] => Interest Claimed, \n[2] => Principal Claimed, \n[3] => Fee Claimed, \n[4] => Excess Returned Claimed, \n[5] => Amount Recovered (from Liquidation), \n[6] => Default Suffered. \n@param  delegateFee         The portion of interest (basis points) that goes to the Pool Delegate.\n@param  stakingFee          The portion of interest (basis points) that goes to the StakeLocker.\n@return poolDelegatePortion The total funds to send to the Pool Delegate.\n@return stakeLockerPortion  The total funds to send to the StakeLocker.\n@return principalClaim      The total principal claim.\n@return interestClaim       The total interest claim."
                  },
                  "functionSelector": "3faa6c5d",
                  "id": 5213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "calculateClaimAndPortions",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5132,
                        "mutability": "mutable",
                        "name": "claimInfo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155565:29:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_calldata_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 5129,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "155565:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5131,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 5130,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "155573:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "155565:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5134,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155604:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5133,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155604:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5136,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155633:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5135,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155633:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "155555:102:0"
                  },
                  "returnParameters": {
                    "id": 5146,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5139,
                        "mutability": "mutable",
                        "name": "poolDelegatePortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155718:27:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5138,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155718:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5141,
                        "mutability": "mutable",
                        "name": "stakeLockerPortion",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155759:26:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5140,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155759:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5143,
                        "mutability": "mutable",
                        "name": "principalClaim",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155799:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5142,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155799:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5145,
                        "mutability": "mutable",
                        "name": "interestClaim",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5213,
                        "src": "155835:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5144,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "155835:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "155704:162:0"
                  },
                  "scope": 5865,
                  "src": "155521:908:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5234,
                    "nodeType": "Block",
                    "src": "156829:114:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5230,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5224,
                                "name": "principalOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5218,
                                "src": "156847:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5226,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5216,
                                    "src": "156879:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 5227,
                                    "name": "liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5220,
                                    "src": "156888:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "313030",
                                    "id": 5228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "156904:3:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_100_by_1",
                                      "typeString": "int_const 100"
                                    },
                                    "value": "100"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_rational_100_by_1",
                                      "typeString": "int_const 100"
                                    }
                                  ],
                                  "id": 5225,
                                  "name": "_convertFromUsd",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5864,
                                  "src": "156863:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (contract IMapleGlobals,address,uint256) view returns (uint256)"
                                  }
                                },
                                "id": 5229,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "156863:45:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "156847:61:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a5052494e434950414c5f4f55545354414e44494e47",
                              "id": 5231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "156910:25:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f1660448eef738a0342c15f653eea57cc0a10caeeed8d9c8006721227b9f78a3",
                                "typeString": "literal_string \"P:PRINCIPAL_OUTSTANDING\""
                              },
                              "value": "P:PRINCIPAL_OUTSTANDING"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f1660448eef738a0342c15f653eea57cc0a10caeeed8d9c8006721227b9f78a3",
                                "typeString": "literal_string \"P:PRINCIPAL_OUTSTANDING\""
                              }
                            ],
                            "id": 5223,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "156839:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "156839:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5233,
                        "nodeType": "ExpressionStatement",
                        "src": "156839:97:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5214,
                    "nodeType": "StructuredDocumentation",
                    "src": "156435:276:0",
                    "text": "@dev   Checks that the deactivation is allowed.\n@param globals        The instance of a MapleGlobals.\n@param principalOut   The amount of funds that are already funded to Loans.\n@param liquidityAsset The Liquidity Asset of the Pool."
                  },
                  "functionSelector": "abbedb40",
                  "id": 5235,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "validateDeactivation",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5221,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5216,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5235,
                        "src": "156746:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5215,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "156746:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5218,
                        "mutability": "mutable",
                        "name": "principalOut",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5235,
                        "src": "156769:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5217,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "156769:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5220,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5235,
                        "src": "156791:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5219,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "156791:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "156745:69:0"
                  },
                  "returnParameters": {
                    "id": 5222,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "156829:0:0"
                  },
                  "scope": 5865,
                  "src": "156716:227:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5293,
                    "nodeType": "Block",
                    "src": "157750:449:0",
                    "statements": [
                      {
                        "assignments": [
                          5250
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5250,
                            "mutability": "mutable",
                            "name": "prevDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5293,
                            "src": "157760:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5249,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "157760:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5254,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 5251,
                            "name": "depositDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5240,
                            "src": "157779:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5253,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 5252,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5246,
                            "src": "157791:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "157779:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "157760:39:0"
                      },
                      {
                        "assignments": [
                          5256
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5256,
                            "mutability": "mutable",
                            "name": "newDate",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5293,
                            "src": "157954:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5255,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "157954:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5281,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5259,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5257,
                                    "name": "balance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5242,
                                    "src": "157973:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5258,
                                    "name": "amt",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5244,
                                    "src": "157983:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "157973:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 5260,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "157972:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 5261,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "157990:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "157972:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 5279,
                            "name": "prevDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5250,
                            "src": "158092:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "157972:128:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5276,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 5274,
                                      "name": "balance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5242,
                                      "src": "158062:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 5275,
                                      "name": "amt",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5244,
                                      "src": "158072:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "158062:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 5271,
                                        "name": "amt",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5244,
                                        "src": "158053:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5268,
                                            "name": "prevDate",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5250,
                                            "src": "158039:8:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 5265,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "158019:5:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 5266,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "158019:15:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "id": 5267,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "sub",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 728,
                                          "src": "158019:19:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 5269,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "158019:29:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 5270,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 791,
                                      "src": "158019:33:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5272,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "158019:38:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5273,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 808,
                                  "src": "158019:42:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "158019:57:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5263,
                                "name": "prevDate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5250,
                                "src": "158006:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5264,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "158006:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "158006:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "157954:146:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5286,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 5282,
                              "name": "depositDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5240,
                              "src": "158111:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 5284,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 5283,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5246,
                              "src": "158123:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "158111:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 5285,
                            "name": "newDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5256,
                            "src": "158134:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "158111:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5287,
                        "nodeType": "ExpressionStatement",
                        "src": "158111:30:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5289,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5246,
                              "src": "158175:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5290,
                              "name": "newDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5256,
                              "src": "158184:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5288,
                            "name": "DepositDateUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4816,
                            "src": "158156:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "158156:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5292,
                        "nodeType": "EmitStatement",
                        "src": "158151:41:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5236,
                    "nodeType": "StructuredDocumentation",
                    "src": "157103:510:0",
                    "text": "@dev   Updates the effective deposit date based on how much new capital has been added. \n@dev   If more capital is added, the deposit date moves closer to the current timestamp. \n@dev   It emits a `DepositDateUpdated` event. \n@param depositDate Storage reference to mapping of effective deposit dates.\n@param balance     Balance of account depositing.\n@param amt         Total deposit amount.\n@param account     Address of account depositing."
                  },
                  "id": 5294,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "updateDepositDate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5247,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5240,
                        "mutability": "mutable",
                        "name": "depositDate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157645:47:0",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                          "id": 5239,
                          "keyType": {
                            "id": 5237,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "157653:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "157645:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          },
                          "valueType": {
                            "id": 5238,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "157664:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5242,
                        "mutability": "mutable",
                        "name": "balance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157694:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5241,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "157694:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5244,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157711:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5243,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "157711:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5246,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5294,
                        "src": "157724:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5245,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "157724:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "157644:96:0"
                  },
                  "returnParameters": {
                    "id": 5248,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "157750:0:0"
                  },
                  "scope": 5865,
                  "src": "157618:581:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5321,
                    "nodeType": "Block",
                    "src": "158611:136:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5307,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5305,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5299,
                                "src": "158629:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5306,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5297,
                                "src": "158635:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "158629:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f5245434549564552",
                              "id": 5308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "158657:20:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_32101c84eaf8dbb6c64ea0e6c0978f210564433c86de069dba3ee31f1ab9b71c",
                                "typeString": "literal_string \"P:INVALID_RECEIVER\""
                              },
                              "value": "P:INVALID_RECEIVER"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_32101c84eaf8dbb6c64ea0e6c0978f210564433c86de069dba3ee31f1ab9b71c",
                                "typeString": "literal_string \"P:INVALID_RECEIVER\""
                              }
                            ],
                            "id": 5304,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "158621:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "158621:57:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5310,
                        "nodeType": "ExpressionStatement",
                        "src": "158621:57:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5312,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5301,
                                "src": "158696:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "158714:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5314,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "158706:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 5313,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "158706:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5316,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "158706:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "158696:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f414d54",
                              "id": 5318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "158724:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              },
                              "value": "P:INVALID_AMT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              }
                            ],
                            "id": 5311,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "158688:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "158688:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5320,
                        "nodeType": "ExpressionStatement",
                        "src": "158688:52:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5295,
                    "nodeType": "StructuredDocumentation",
                    "src": "158205:310:0",
                    "text": "@dev Performs all necessary checks for a `transferByCustodian` call. \n@dev From and to must always be equal. \n@param from   The address of the source of funds.\n@param to     The address of the destination of funds.\n@param amount The amount of funds transfer."
                  },
                  "functionSelector": "1b4c9031",
                  "id": 5322,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodianChecks",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5302,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5297,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5322,
                        "src": "158555:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5296,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "158555:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5299,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5322,
                        "src": "158569:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5298,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "158569:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5301,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5322,
                        "src": "158581:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5300,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "158581:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "158554:42:0"
                  },
                  "returnParameters": {
                    "id": 5303,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "158611:0:0"
                  },
                  "scope": 5865,
                  "src": "158520:227:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5361,
                    "nodeType": "Block",
                    "src": "159294:204:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5335,
                                "name": "custodian",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5325,
                                "src": "159312:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5338,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "159333:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5337,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "159325:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 5336,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "159325:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5339,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "159325:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "159312:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f435553544f4449414e",
                              "id": 5341,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "159341:21:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4870118a565f6fda1304d271885b77375c0689649970e3d9cc94baf3076be90e",
                                "typeString": "literal_string \"P:INVALID_CUSTODIAN\""
                              },
                              "value": "P:INVALID_CUSTODIAN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4870118a565f6fda1304d271885b77375c0689649970e3d9cc94baf3076be90e",
                                "typeString": "literal_string \"P:INVALID_CUSTODIAN\""
                              }
                            ],
                            "id": 5334,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "159304:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "159304:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5343,
                        "nodeType": "ExpressionStatement",
                        "src": "159304:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5345,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5327,
                                "src": "159381:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 5348,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "159402:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 5347,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "159394:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 5346,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "159394:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 5349,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "159394:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "159381:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f414d54",
                              "id": 5351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "159410:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              },
                              "value": "P:INVALID_AMT"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_35dfc62dbd2c5c95c634fb123c8001e68edffafe0cba8e0d0f9840c7f1ae4df1",
                                "typeString": "literal_string \"P:INVALID_AMT\""
                              }
                            ],
                            "id": 5344,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "159373:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "159373:53:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5353,
                        "nodeType": "ExpressionStatement",
                        "src": "159373:53:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5357,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5355,
                                "name": "newTotalAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5329,
                                "src": "159444:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5356,
                                "name": "fdtBal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5331,
                                "src": "159465:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "159444:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e5355465f42414c414e4345",
                              "id": 5358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "159473:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cd7815bea7c8ea5b1d656ae6595c8d8e090f57ddc69b1d1bc8aa9b5e22ff6c27",
                                "typeString": "literal_string \"P:INSUF_BALANCE\""
                              },
                              "value": "P:INSUF_BALANCE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cd7815bea7c8ea5b1d656ae6595c8d8e090f57ddc69b1d1bc8aa9b5e22ff6c27",
                                "typeString": "literal_string \"P:INSUF_BALANCE\""
                              }
                            ],
                            "id": 5354,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "159436:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "159436:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5360,
                        "nodeType": "ExpressionStatement",
                        "src": "159436:55:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5323,
                    "nodeType": "StructuredDocumentation",
                    "src": "158753:404:0",
                    "text": "@dev  Performs all necessary checks for an `increaseCustodyAllowance` call.\n@param custodian         The custodian where the funds will be locked to.\n@param amount            The additional amount to custody.\n@param newTotalAllowance The new total amount in custody, for some account.\n@param fdtBal            The the total FDT balance of some account."
                  },
                  "functionSelector": "297e7bf7",
                  "id": 5362,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowanceChecks",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5332,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5325,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159202:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5324,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "159202:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5327,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159221:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5326,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "159221:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5329,
                        "mutability": "mutable",
                        "name": "newTotalAllowance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159237:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5328,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "159237:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5331,
                        "mutability": "mutable",
                        "name": "fdtBal",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5362,
                        "src": "159264:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5330,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "159264:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "159201:78:0"
                  },
                  "returnParameters": {
                    "id": 5333,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "159294:0:0"
                  },
                  "scope": 5865,
                  "src": "159162:336:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5413,
                    "nodeType": "Block",
                    "src": "160083:243:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 5378,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5373,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "160101:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 5374,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "160101:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5375,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5369,
                                    "src": "160115:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 5376,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "governor",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2485,
                                  "src": "160115:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 5377,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "160115:18:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "160101:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f474f56",
                              "id": 5379,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160135:11:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_af2372b792754d0b43b9adfed9e6d3e70a8603ec1035bd9ad3143c3e85d3800f",
                                "typeString": "literal_string \"P:NOT_GOV\""
                              },
                              "value": "P:NOT_GOV"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_af2372b792754d0b43b9adfed9e6d3e70a8603ec1035bd9ad3143c3e85d3800f",
                                "typeString": "literal_string \"P:NOT_GOV\""
                              }
                            ],
                            "id": 5372,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160093:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5380,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160093:54:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5381,
                        "nodeType": "ExpressionStatement",
                        "src": "160093:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5392,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 5385,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5383,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5365,
                                  "src": "160165:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 5384,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5367,
                                  "src": "160174:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "160165:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 5391,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5386,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5365,
                                  "src": "160192:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 5389,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "160209:1:0",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 5388,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "160201:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 5387,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "160201:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 5390,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "160201:10:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "160192:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "160165:46:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e56414c49445f544f4b454e",
                              "id": 5393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160213:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_56434096b44064c18704dfff2461e99fb0013b6a3039dc2649fc7f44595494e9",
                                "typeString": "literal_string \"P:INVALID_TOKEN\""
                              },
                              "value": "P:INVALID_TOKEN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_56434096b44064c18704dfff2461e99fb0013b6a3039dc2649fc7f44595494e9",
                                "typeString": "literal_string \"P:INVALID_TOKEN\""
                              }
                            ],
                            "id": 5382,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160157:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160157:74:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5395,
                        "nodeType": "ExpressionStatement",
                        "src": "160157:74:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 5400,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "160268:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 5401,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "160268:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5408,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "160312:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_PoolLib_$5865",
                                        "typeString": "library PoolLib"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_PoolLib_$5865",
                                        "typeString": "library PoolLib"
                                      }
                                    ],
                                    "id": 5407,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "160304:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 5406,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "160304:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 5409,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "160304:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5403,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5365,
                                      "src": "160287:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 5402,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 77,
                                    "src": "160280:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 5404,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "160280:13:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 5405,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "160280:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "160280:38:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5397,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5365,
                                  "src": "160248:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5396,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "160241:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 5398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "160241:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4601,
                            "src": "160241:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 5411,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160241:78:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5412,
                        "nodeType": "ExpressionStatement",
                        "src": "160241:78:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5363,
                    "nodeType": "StructuredDocumentation",
                    "src": "159628:357: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.\n@param liquidityAsset The address of Liquidity Asset that is supported by the Pool.\n@param globals        The instance of a MapleGlobals."
                  },
                  "functionSelector": "a89d5ddb",
                  "id": 5414,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5370,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5365,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5414,
                        "src": "160012:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5364,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "160012:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5367,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5414,
                        "src": "160027:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5366,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "160027:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5369,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5414,
                        "src": "160051:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5368,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "160051:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "160011:62:0"
                  },
                  "returnParameters": {
                    "id": 5371,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "160083:0:0"
                  },
                  "scope": 5865,
                  "src": "159990:336:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5470,
                    "nodeType": "Block",
                    "src": "160608:275:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5425,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5419,
                                "src": "160626:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 5426,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "160631:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "160626:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4449565f5a45524f",
                              "id": 5428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160634:12:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_83b98fd306f35608b66d6951b168382fb8b9fbd2075d664f1766a74045809297",
                                "typeString": "literal_string \"P:DIV_ZERO\""
                              },
                              "value": "P:DIV_ZERO"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_83b98fd306f35608b66d6951b168382fb8b9fbd2075d664f1766a74045809297",
                                "typeString": "literal_string \"P:DIV_ZERO\""
                              }
                            ],
                            "id": 5424,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160618:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160618:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5430,
                        "nodeType": "ExpressionStatement",
                        "src": "160618:29:0"
                      },
                      {
                        "assignments": [
                          5432
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5432,
                            "mutability": "mutable",
                            "name": "c0",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5470,
                            "src": "160657:10:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5431,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "160657:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5436,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5433,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5417,
                            "src": "160670:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5434,
                            "name": "WAD",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4799,
                            "src": "160674:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "160670:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "160657:20:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5446,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5438,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5417,
                                  "src": "160695:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 5439,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "160700:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "160695:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5445,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 5441,
                                    "name": "c0",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5432,
                                    "src": "160705:2:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5442,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5417,
                                    "src": "160710:1:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "160705:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 5444,
                                  "name": "WAD",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4799,
                                  "src": "160715:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "160705:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "160695:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4449565f494e5445524e414c",
                              "id": 5447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160720:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              },
                              "value": "P:DIV_INTERNAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              }
                            ],
                            "id": 5437,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160687:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160687:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5449,
                        "nodeType": "ExpressionStatement",
                        "src": "160687:50:0"
                      },
                      {
                        "assignments": [
                          5451
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5451,
                            "mutability": "mutable",
                            "name": "c1",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5470,
                            "src": "160765:10:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5450,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "160765:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5458,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5452,
                            "name": "c0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5432,
                            "src": "160778:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 5453,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5419,
                                  "src": "160784:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "32",
                                  "id": 5454,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "160788:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "160784:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 5456,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "160783:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "160778:12:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "160765:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5462,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 5460,
                                "name": "c1",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5451,
                                "src": "160808:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 5461,
                                "name": "c0",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5432,
                                "src": "160814:2:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "160808:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4449565f494e5445524e414c",
                              "id": 5463,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "160818:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              },
                              "value": "P:DIV_INTERNAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_22d4a06107960fb2e43ae274d586050b37cbee5b63ee5da88cce66faa36144e8",
                                "typeString": "literal_string \"P:DIV_INTERNAL\""
                              }
                            ],
                            "id": 5459,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "160800:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 5464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "160800:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5465,
                        "nodeType": "ExpressionStatement",
                        "src": "160800:35:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5468,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5466,
                            "name": "c1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5451,
                            "src": "160870:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5467,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5419,
                            "src": "160875:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "160870:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5423,
                        "id": 5469,
                        "nodeType": "Return",
                        "src": "160863:13:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5415,
                    "nodeType": "StructuredDocumentation",
                    "src": "160426:108:0",
                    "text": "@dev Official Balancer pool bdiv() function. Does synthetic float with 10^-18 precision."
                  },
                  "id": 5471,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_bdiv",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5420,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5417,
                        "mutability": "mutable",
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5471,
                        "src": "160554:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5416,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "160554:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5419,
                        "mutability": "mutable",
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5471,
                        "src": "160565:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5418,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "160565:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "160553:22:0"
                  },
                  "returnParameters": {
                    "id": 5423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5422,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5471,
                        "src": "160599:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "160599:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "160598:9:0"
                  },
                  "scope": 5865,
                  "src": "160539:344:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5536,
                    "nodeType": "Block",
                    "src": "161734:805:0",
                    "statements": [
                      {
                        "assignments": [
                          5486
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5486,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "161744:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5485,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "161744:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5490,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5488,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5474,
                              "src": "161766:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5487,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "161759:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "161759:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "161744:29:0"
                      },
                      {
                        "assignments": [
                          5492
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5492,
                            "mutability": "mutable",
                            "name": "amountStakedBPT",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162007:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5491,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162007:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5499,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5497,
                              "name": "staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5478,
                              "src": "162069:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5494,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5480,
                                  "src": "162046:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5493,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "162039:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 5495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "162039:19:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16,
                            "src": "162039:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162039:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162007:69:0"
                      },
                      {
                        "assignments": [
                          5501
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5501,
                            "mutability": "mutable",
                            "name": "totalSupplyBPT",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162086:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5500,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162086:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5507,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5503,
                                  "name": "_bPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5474,
                                  "src": "162125:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5502,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 77,
                                "src": "162118:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 5504,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "162118:14:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 5505,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8,
                            "src": "162118:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5506,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162118:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162086:60:0"
                      },
                      {
                        "assignments": [
                          5509
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5509,
                            "mutability": "mutable",
                            "name": "liquidityAssetBalance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162156:29:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5508,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162156:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5514,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5512,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "162205:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5510,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5486,
                              "src": "162188:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5511,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4223,
                            "src": "162188:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5513,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162188:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162156:64:0"
                      },
                      {
                        "assignments": [
                          5516
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5516,
                            "mutability": "mutable",
                            "name": "liquidityAssetWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5536,
                            "src": "162230:28:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5515,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "162230:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5521,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5519,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "162288:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5517,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5486,
                              "src": "162262:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getNormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4230,
                            "src": "162262:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5520,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162262:41:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "162230:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5533,
                              "name": "WAD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4799,
                              "src": "162528:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5528,
                                      "name": "liquidityAssetBalance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5509,
                                      "src": "162478:21:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 5529,
                                      "name": "liquidityAssetWeight",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5516,
                                      "src": "162501:20:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 5527,
                                    "name": "_bdiv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5471,
                                    "src": "162472:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5530,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "162472:50:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5523,
                                      "name": "amountStakedBPT",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5492,
                                      "src": "162435:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 5524,
                                      "name": "totalSupplyBPT",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5501,
                                      "src": "162452:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 5522,
                                    "name": "_bdiv",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5471,
                                    "src": "162429:5:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5525,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "162429:38:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5526,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "162429:42:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5531,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "162429:94:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "162429:98:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "162429:103:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5484,
                        "id": 5535,
                        "nodeType": "Return",
                        "src": "162422:110:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5472,
                    "nodeType": "StructuredDocumentation",
                    "src": "160889:677:0",
                    "text": "@dev    Calculates the value of BPT in units of Liquidity Asset. \n@dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \nof Liquidity Asset into the Pool and swapping back after this function is called. \n@param  _bPool         The address of Balancer pool.\n@param  liquidityAsset The asset used by Pool for liquidity to fund Loans.\n@param  staker         The address that deposited BPTs to StakeLocker.\n@param  stakeLocker    The contract that escrows the  BPTs deposited by Staker.\n@return The USDC value of Staker BPTs."
                  },
                  "functionSelector": "681cb10a",
                  "id": 5537,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BPTVal",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5481,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5474,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161596:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5473,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161596:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5476,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161620:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5475,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161620:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5478,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161652:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5477,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161652:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5480,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161676:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5479,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "161676:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "161586:115:0"
                  },
                  "returnParameters": {
                    "id": 5484,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5483,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5537,
                        "src": "161725:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5482,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "161725:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "161724:9:0"
                  },
                  "scope": 5865,
                  "src": "161571:968:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5562,
                    "nodeType": "Block",
                    "src": "163227:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5552,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5540,
                              "src": "163261:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5553,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5542,
                              "src": "163269:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5558,
                                  "name": "staker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5544,
                                  "src": "163315:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5555,
                                      "name": "stakeLocker",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5546,
                                      "src": "163292:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 5554,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 77,
                                    "src": "163285:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 5556,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "163285:19:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 5557,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "163285:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "163285:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5551,
                            "name": "_getSwapOutValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5668,
                            "src": "163244:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 5560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "163244:79:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5550,
                        "id": 5561,
                        "nodeType": "Return",
                        "src": "163237:86:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5538,
                    "nodeType": "StructuredDocumentation",
                    "src": "162545:507:0",
                    "text": "@dev    Calculates Liquidity Asset swap out value of staker BPT balance escrowed in StakeLocker.\n@param  _bPool         The Balancer pool that issues the BPTs.\n@param  liquidityAsset The Swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  staker         The address that deposited BPTs to StakeLocker.\n@param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n@return liquidityAsset The swap out value of staker BPTs."
                  },
                  "functionSelector": "ee7375be",
                  "id": 5563,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSwapOutValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5547,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5540,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163091:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5539,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163091:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5542,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163115:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5541,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163115:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5544,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163147:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5543,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163147:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5546,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163171:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5545,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163171:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163081:115:0"
                  },
                  "returnParameters": {
                    "id": 5550,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5549,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5563,
                        "src": "163218:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5548,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "163218:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163217:9:0"
                  },
                  "scope": 5865,
                  "src": "163057:273:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5586,
                    "nodeType": "Block",
                    "src": "163926:103:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5576,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5566,
                              "src": "163960:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5577,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5568,
                              "src": "163968:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5582,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5570,
                                  "src": "164009:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 5579,
                                      "name": "_bPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5566,
                                      "src": "163991:6:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 5578,
                                    "name": "IBPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4312,
                                    "src": "163984:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                                      "typeString": "type(contract IBPool)"
                                    }
                                  },
                                  "id": 5580,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "163984:14:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBPool_$4312",
                                    "typeString": "contract IBPool"
                                  }
                                },
                                "id": 5581,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4191,
                                "src": "163984:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "163984:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5575,
                            "name": "_getSwapOutValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5668,
                            "src": "163943:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (address,address,uint256) view returns (uint256)"
                            }
                          },
                          "id": 5584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "163943:79:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5574,
                        "id": 5585,
                        "nodeType": "Return",
                        "src": "163936:86:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5564,
                    "nodeType": "StructuredDocumentation",
                    "src": "163336:433:0",
                    "text": "@dev    Calculates Liquidity Asset swap out value of entire BPT balance escrowed in StakeLocker.\n@param  _bPool         The Balancer pool that issues the BPTs.\n@param  liquidityAsset The swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  stakeLocker    The contract that escrows BPTs deposited by Staker.\n@return liquidityAsset The swap out value of StakeLocker BPTs."
                  },
                  "functionSelector": "4119bdfa",
                  "id": 5587,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSwapOutValueLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5566,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163814:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5565,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163814:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5568,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163838:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5567,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163838:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5570,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163870:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5569,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "163870:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163804:91:0"
                  },
                  "returnParameters": {
                    "id": 5574,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5573,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5587,
                        "src": "163917:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5572,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "163917:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "163916:9:0"
                  },
                  "scope": 5865,
                  "src": "163774:255:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5667,
                    "nodeType": "Block",
                    "src": "164185:1004:0",
                    "statements": [
                      {
                        "assignments": [
                          5599
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5599,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164244:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5598,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "164244:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5603,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5601,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5589,
                              "src": "164277:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5600,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "164270:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164270:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164244:40:0"
                      },
                      {
                        "assignments": [
                          5605
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5605,
                            "mutability": "mutable",
                            "name": "tokenBalanceOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164294:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5604,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164294:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5610,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5608,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5591,
                              "src": "164337:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5606,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164320:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4223,
                            "src": "164320:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164320:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164294:58:0"
                      },
                      {
                        "assignments": [
                          5612
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5612,
                            "mutability": "mutable",
                            "name": "tokenWeightOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164362:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5611,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164362:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5617,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5615,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5591,
                              "src": "164416:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5613,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164388:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4237,
                            "src": "164388:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5616,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164388:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164362:69:0"
                      },
                      {
                        "assignments": [
                          5619
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5619,
                            "mutability": "mutable",
                            "name": "poolSupply",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164441:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5618,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164441:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5623,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5620,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164467:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4252,
                            "src": "164467:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164467:19:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164441:45:0"
                      },
                      {
                        "assignments": [
                          5625
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5625,
                            "mutability": "mutable",
                            "name": "totalWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164496:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5624,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164496:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5629,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5626,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164522:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTotalDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4242,
                            "src": "164522:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164522:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164496:60:0"
                      },
                      {
                        "assignments": [
                          5631
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5631,
                            "mutability": "mutable",
                            "name": "swapFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164566:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5630,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164566:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5635,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5632,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164592:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5633,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getSwapFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4247,
                            "src": "164592:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164592:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164566:44:0"
                      },
                      {
                        "assignments": [
                          5637
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5637,
                            "mutability": "mutable",
                            "name": "tokenAmountOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "164708:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5636,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "164708:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5647,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5640,
                              "name": "tokenBalanceOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5605,
                              "src": "164777:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5641,
                              "name": "tokenWeightOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5612,
                              "src": "164806:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5642,
                              "name": "poolSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5619,
                              "src": "164834:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5643,
                              "name": "totalWeight",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5625,
                              "src": "164858:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5644,
                              "name": "poolAmountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5593,
                              "src": "164883:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5645,
                              "name": "swapFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5631,
                              "src": "164909:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5638,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5599,
                              "src": "164733:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5639,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "calcSingleOutGivenPoolIn",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4283,
                            "src": "164733:30:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure external returns (uint256)"
                            }
                          },
                          "id": 5646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "164733:193:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "164708:218:0"
                      },
                      {
                        "assignments": [
                          5649
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5649,
                            "mutability": "mutable",
                            "name": "maxSwapOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5667,
                            "src": "165034:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5648,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "165034:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5659,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5657,
                              "name": "WAD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4799,
                              "src": "165102:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 5652,
                                      "name": "bPool",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5599,
                                      "src": "165075:5:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IBPool_$4312",
                                        "typeString": "contract IBPool"
                                      }
                                    },
                                    "id": 5653,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "MAX_OUT_RATIO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4175,
                                    "src": "165075:19:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                      "typeString": "function () view external returns (uint256)"
                                    }
                                  },
                                  "id": 5654,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "165075:21:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5650,
                                  "name": "tokenBalanceOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5605,
                                  "src": "165055:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5651,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "165055:19:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5655,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "165055:42:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "165055:46:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5658,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "165055:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "165034:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5662,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5660,
                              "name": "tokenAmountOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5637,
                              "src": "165124:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 5661,
                              "name": "maxSwapOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5649,
                              "src": "165142:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "165124:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 5664,
                            "name": "maxSwapOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5649,
                            "src": "165172:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "165124:58:0",
                          "trueExpression": {
                            "argumentTypes": null,
                            "id": 5663,
                            "name": "tokenAmountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5637,
                            "src": "165155:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5597,
                        "id": 5666,
                        "nodeType": "Return",
                        "src": "165117:65:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 5668,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getSwapOutValue",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5594,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5589,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164070:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5588,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "164070:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5591,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164094:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5590,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "164094:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5593,
                        "mutability": "mutable",
                        "name": "poolAmountIn",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164126:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5592,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "164126:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "164060:92:0"
                  },
                  "returnParameters": {
                    "id": 5597,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5596,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5668,
                        "src": "164176:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5595,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "164176:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "164175:9:0"
                  },
                  "scope": 5865,
                  "src": "164035:1154:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5745,
                    "nodeType": "Block",
                    "src": "166454:880:0",
                    "statements": [
                      {
                        "assignments": [
                          5687
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5687,
                            "mutability": "mutable",
                            "name": "bPool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166514:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IBPool_$4312",
                              "typeString": "contract IBPool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 5686,
                              "name": "IBPool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 4312,
                              "src": "166514:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5691,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5689,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5671,
                              "src": "166536:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5688,
                            "name": "IBPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "166529:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IBPool_$4312_$",
                              "typeString": "type(contract IBPool)"
                            }
                          },
                          "id": 5690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166529:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IBPool_$4312",
                            "typeString": "contract IBPool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166514:29:0"
                      },
                      {
                        "assignments": [
                          5693
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5693,
                            "mutability": "mutable",
                            "name": "tokenBalanceOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166554:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5692,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166554:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5698,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5696,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5673,
                              "src": "166597:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5694,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166580:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5695,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getBalance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4223,
                            "src": "166580:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5697,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166580:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166554:58:0"
                      },
                      {
                        "assignments": [
                          5700
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5700,
                            "mutability": "mutable",
                            "name": "tokenWeightOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166622:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5699,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166622:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5705,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5703,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5673,
                              "src": "166676:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5701,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166648:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4237,
                            "src": "166648:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166648:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166622:69:0"
                      },
                      {
                        "assignments": [
                          5707
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5707,
                            "mutability": "mutable",
                            "name": "poolSupply",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166701:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5706,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166701:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5711,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5708,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166727:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5709,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4252,
                            "src": "166727:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166727:19:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166701:45:0"
                      },
                      {
                        "assignments": [
                          5713
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5713,
                            "mutability": "mutable",
                            "name": "totalWeight",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166756:19:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5712,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166756:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5717,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5714,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166782:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5715,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getTotalDenormalizedWeight",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4242,
                            "src": "166782:32:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5716,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166782:34:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166756:60:0"
                      },
                      {
                        "assignments": [
                          5719
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5719,
                            "mutability": "mutable",
                            "name": "swapFee",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5745,
                            "src": "166826:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5718,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "166826:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 5723,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5720,
                              "name": "bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5687,
                              "src": "166852:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBPool_$4312",
                                "typeString": "contract IBPool"
                              }
                            },
                            "id": 5721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getSwapFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4247,
                            "src": "166852:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 5722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "166852:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "166826:44:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5734,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5724,
                            "name": "poolAmountInRequired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5682,
                            "src": "166974:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5727,
                                "name": "tokenBalanceOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5693,
                                "src": "167041:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5728,
                                "name": "tokenWeightOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5700,
                                "src": "167070:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5729,
                                "name": "poolSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5707,
                                "src": "167098:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5730,
                                "name": "totalWeight",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5713,
                                "src": "167122:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5731,
                                "name": "liquidityAssetAmountRequired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5679,
                                "src": "167147:28:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5732,
                                "name": "swapFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5719,
                                "src": "167189:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 5725,
                                "name": "bPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5687,
                                "src": "166997:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBPool_$4312",
                                  "typeString": "contract IBPool"
                                }
                              },
                              "id": 5726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "calcPoolInGivenSingleOut",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4300,
                              "src": "166997:30:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256,uint256,uint256,uint256) pure external returns (uint256)"
                              }
                            },
                            "id": 5733,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "166997:209:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "166974:232:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5735,
                        "nodeType": "ExpressionStatement",
                        "src": "166974:232:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5736,
                            "name": "stakerBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5684,
                            "src": "167274:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5741,
                                "name": "staker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5675,
                                "src": "167320:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 5738,
                                    "name": "stakeLocker",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5677,
                                    "src": "167297:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 5737,
                                  "name": "IERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 77,
                                  "src": "167290:6:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                    "typeString": "type(contract IERC20)"
                                  }
                                },
                                "id": 5739,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "167290:19:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$77",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 5740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 16,
                              "src": "167290:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 5742,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "167290:37:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "167274:53:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5744,
                        "nodeType": "ExpressionStatement",
                        "src": "167274:53:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5669,
                    "nodeType": "StructuredDocumentation",
                    "src": "165195:988:0",
                    "text": "@dev    Calculates BPTs required if burning BPTs for liquidityAsset, given supplied tokenAmountOutRequired. \n@dev    Vulnerable to flash-loan attacks where the attacker can artificially inflate the BPT price by swapping a large amount \nof liquidityAsset into the pool and swapping back after this function is called.\n@param  _bPool                       The Balancer pool that issues the BPTs.\n@param  liquidityAsset               The swap out asset (e.g. USDC) to receive when burning BPTs.\n@param  staker                       The address that deposited BPTs to stakeLocker.\n@param  stakeLocker                  The contract that escrows BPTs deposited by staker.\n@param  liquidityAssetAmountRequired The amount of liquidityAsset required to recover.\n@return poolAmountInRequired         The required poolAmountIn.\n@return stakerBalance                The poolAmountIn currently staked."
                  },
                  "functionSelector": "c3746825",
                  "id": 5746,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolSharesRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5680,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5671,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166228:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5670,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166228:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5673,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166252:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5672,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166252:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5675,
                        "mutability": "mutable",
                        "name": "staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166284:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166284:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5677,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166308:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5676,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "166308:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5679,
                        "mutability": "mutable",
                        "name": "liquidityAssetAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166337:36:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5678,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "166337:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "166218:161:0"
                  },
                  "returnParameters": {
                    "id": 5685,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5682,
                        "mutability": "mutable",
                        "name": "poolAmountInRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166401:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5681,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "166401:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5684,
                        "mutability": "mutable",
                        "name": "stakerBalance",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5746,
                        "src": "166431:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5683,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "166431:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "166400:53:0"
                  },
                  "scope": 5865,
                  "src": "166188:1146:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 5807,
                    "nodeType": "Block",
                    "src": "168759:489:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5770,
                            "name": "swapOutAmountRequired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5760,
                            "src": "168769:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5772,
                                "name": "globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5749,
                                "src": "168809:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                  "typeString": "contract IMapleGlobals"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5773,
                                "name": "liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5753,
                                "src": "168818:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5774,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5749,
                                    "src": "168834:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 5775,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "swapOutRequired",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2509,
                                  "src": "168834:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view external returns (uint256)"
                                  }
                                },
                                "id": 5776,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "168834:25:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                  "typeString": "contract IMapleGlobals"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5771,
                              "name": "_convertFromUsd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5864,
                              "src": "168793:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (contract IMapleGlobals,address,uint256) view returns (uint256)"
                              }
                            },
                            "id": 5777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "168793:67:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "168769:91:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5779,
                        "nodeType": "ExpressionStatement",
                        "src": "168769:91:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 5780,
                                "name": "poolAmountInRequired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5766,
                                "src": "168884:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5781,
                                "name": "poolAmountPresent",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5768,
                                "src": "168918:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 5782,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "168870:75:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5784,
                                "name": "balancerPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5751,
                                "src": "168970:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5785,
                                "name": "liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5753,
                                "src": "168984:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5786,
                                "name": "poolDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5755,
                                "src": "169000:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5787,
                                "name": "stakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5757,
                                "src": "169014:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5788,
                                "name": "swapOutAmountRequired",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5760,
                                "src": "169027:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5783,
                              "name": "getPoolSharesRequired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5746,
                              "src": "168948:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                "typeString": "function (address,address,address,address,uint256) view returns (uint256,uint256)"
                              }
                            },
                            "id": 5789,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "168948:101:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                              "typeString": "tuple(uint256,uint256)"
                            }
                          },
                          "src": "168870:179:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5791,
                        "nodeType": "ExpressionStatement",
                        "src": "168870:179:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5792,
                            "name": "currentPoolDelegateCover",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5762,
                            "src": "169060:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 5794,
                                "name": "balancerPool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5751,
                                "src": "169105:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5795,
                                "name": "liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5753,
                                "src": "169119:14:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5796,
                                "name": "poolDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5755,
                                "src": "169135:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 5797,
                                "name": "stakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5757,
                                "src": "169149:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 5793,
                              "name": "getSwapOutValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5563,
                              "src": "169089:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address,address,address,address) view returns (uint256)"
                              }
                            },
                            "id": 5798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "169089:72:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "169060:101:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5800,
                        "nodeType": "ExpressionStatement",
                        "src": "169060:101:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 5805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 5801,
                            "name": "enoughStakeForFinalization",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5764,
                            "src": "169171:26:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5804,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 5802,
                              "name": "poolAmountPresent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5768,
                              "src": "169200:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 5803,
                              "name": "poolAmountInRequired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5766,
                              "src": "169221:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "169200:41:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "169171:70:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5806,
                        "nodeType": "ExpressionStatement",
                        "src": "169171:70:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5747,
                    "nodeType": "StructuredDocumentation",
                    "src": "167340:1038:0",
                    "text": "@dev    Returns information on the stake requirements.\n@param  globals                    The instance of a MapleGlobals.\n@param  balancerPool               The address of Balancer pool.\n@param  liquidityAsset             The address of Liquidity Asset, to be returned from swap out.\n@param  poolDelegate               The address of Pool Delegate.\n@param  stakeLocker                The address of StakeLocker.\n@return swapOutAmountRequired      The minimum amount of Liquidity Asset coverage from staking required (in Liquidity Asset units).\n@return currentPoolDelegateCover   The present amount of Liquidity Asset coverage from Pool Delegate stake (in Liquidity Asset units).\n@return enoughStakeForFinalization Whether enough stake is present from Pool Delegate for Pool finalization.\n@return poolAmountInRequired       The BPTs required for minimum Liquidity Asset coverage.\n@return poolAmountPresent          The current staked BPTs."
                  },
                  "functionSelector": "767f5038",
                  "id": 5808,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInitialStakeRequirements",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5758,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5749,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168420:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5748,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "168420:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5751,
                        "mutability": "mutable",
                        "name": "balancerPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168443:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5750,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168443:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5753,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168465:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5752,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168465:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5755,
                        "mutability": "mutable",
                        "name": "poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168489:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5754,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168489:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5757,
                        "mutability": "mutable",
                        "name": "stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168511:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5756,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "168511:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "168419:112:0"
                  },
                  "returnParameters": {
                    "id": 5769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5760,
                        "mutability": "mutable",
                        "name": "swapOutAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168564:29:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5759,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168564:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5762,
                        "mutability": "mutable",
                        "name": "currentPoolDelegateCover",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168603:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5761,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168603:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5764,
                        "mutability": "mutable",
                        "name": "enoughStakeForFinalization",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168645:34:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5763,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "168645:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5766,
                        "mutability": "mutable",
                        "name": "poolAmountInRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168689:28:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5765,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168689:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5768,
                        "mutability": "mutable",
                        "name": "poolAmountPresent",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5808,
                        "src": "168727:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5767,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "168727:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "168554:204:0"
                  },
                  "scope": 5865,
                  "src": "168383:865:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5828,
                    "nodeType": "Block",
                    "src": "169659:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5825,
                              "name": "WAD",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4799,
                              "src": "169718:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5822,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3130",
                                    "id": 5820,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "169684:2:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 5821,
                                    "name": "liquidityAssetDecimals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5813,
                                    "src": "169690:22:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "169684:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5818,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5811,
                                  "src": "169676:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5819,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "169676:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "169676:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "169676:41:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5826,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "169676:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5817,
                        "id": 5827,
                        "nodeType": "Return",
                        "src": "169669:53:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5809,
                    "nodeType": "StructuredDocumentation",
                    "src": "169348:212:0",
                    "text": "@dev   Converts from WAD precision to Liquidity Asset precision.\n@param amt                    The amount to convert.\n@param liquidityAssetDecimals The Liquidity Asset decimal."
                  },
                  "functionSelector": "bf36f0e9",
                  "id": 5829,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fromWad",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5814,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5811,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5829,
                        "src": "169582:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5810,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "169582:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5813,
                        "mutability": "mutable",
                        "name": "liquidityAssetDecimals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5829,
                        "src": "169595:30:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5812,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "169595:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "169581:45:0"
                  },
                  "returnParameters": {
                    "id": 5817,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5816,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5829,
                        "src": "169650:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5815,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "169650:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "169649:9:0"
                  },
                  "scope": 5865,
                  "src": "169565:164:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 5863,
                    "nodeType": "Block",
                    "src": "170285:352:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 5859,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5834,
                                  "src": "170569:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 5857,
                                  "name": "globals",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5832,
                                  "src": "170546:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "id": 5858,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getLatestPrice",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2839,
                                "src": "170546:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 5860,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "170546:38:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5854,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3130",
                                    "id": 5848,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "170439:2:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "10"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "**",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "id": 5850,
                                            "name": "liquidityAsset",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5834,
                                            "src": "170459:14:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 5849,
                                          "name": "IERC20Details",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4330,
                                          "src": "170445:13:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_IERC20Details_$4330_$",
                                            "typeString": "type(contract IERC20Details)"
                                          }
                                        },
                                        "id": 5851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "170445:29:0",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IERC20Details_$4330",
                                          "typeString": "contract IERC20Details"
                                        }
                                      },
                                      "id": 5852,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "decimals",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4329,
                                      "src": "170445:38:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                        "typeString": "function () view external returns (uint256)"
                                      }
                                    },
                                    "id": 5853,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "170445:40:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "170439:46:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      },
                                      "id": 5845,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "3130",
                                        "id": 5843,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "170329:2:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "38",
                                        "id": 5844,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "170335:1:0",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "8"
                                      },
                                      "src": "170329:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 5841,
                                      "name": "usdAmount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5836,
                                      "src": "170302:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 5842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 791,
                                    "src": "170302:26:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5846,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "170302:35:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 5847,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "170302:136:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 5855,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "170302:184:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5856,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "170302:243:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "170302:283:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5840,
                        "id": 5862,
                        "nodeType": "Return",
                        "src": "170295:290:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5830,
                    "nodeType": "StructuredDocumentation",
                    "src": "169735:422:0",
                    "text": "@dev    Returns Liquidity Asset in Liquidity Asset units when given integer USD (E.g., $100 = 100).\n@param  globals        The instance of a MapleGlobals.\n@param  liquidityAsset The Liquidity Asset of the pool.\n@param  usdAmount      The USD amount to convert, in integer units (e.g., $100 = 100).\n@return The usdAmount worth of Liquidity Asset, in Liquidity Asset units."
                  },
                  "id": 5864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_convertFromUsd",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5837,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5832,
                        "mutability": "mutable",
                        "name": "globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170187:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 5831,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "170187:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5834,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170210:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5833,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "170210:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5836,
                        "mutability": "mutable",
                        "name": "usdAmount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170234:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5835,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "170234:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "170186:66:0"
                  },
                  "returnParameters": {
                    "id": 5840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5839,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 5864,
                        "src": "170276:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "170276:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "170275:9:0"
                  },
                  "scope": 5865,
                  "src": "170162:475:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "148338:22302:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 5867,
                    "name": "IPool",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3697,
                    "src": "172017:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPool_$3697",
                      "typeString": "contract IPool"
                    }
                  },
                  "id": 5868,
                  "nodeType": "InheritanceSpecifier",
                  "src": "172017:5:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 5869,
                    "name": "PoolFDT",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3230,
                    "src": "172024:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PoolFDT_$3230",
                      "typeString": "contract PoolFDT"
                    }
                  },
                  "id": 5870,
                  "nodeType": "InheritanceSpecifier",
                  "src": "172024:7:0"
                }
              ],
              "contractDependencies": [
                77,
                141,
                1076,
                1574,
                1946,
                2006,
                2379,
                3120,
                3230,
                3697
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 5866,
                "nodeType": "StructuredDocumentation",
                "src": "171923:77:0",
                "text": "@title Pool maintains all accounting and functionality related to Pools."
              },
              "fullyImplemented": true,
              "id": 7392,
              "linearizedBaseContracts": [
                7392,
                3230,
                2379,
                1946,
                1574,
                3697,
                3120,
                2006,
                141,
                77,
                1076
              ],
              "name": "Pool",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 5873,
                  "libraryName": {
                    "contractScope": null,
                    "id": 5871,
                    "name": "SafeERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4780,
                    "src": "172045:9:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeERC20_$4780",
                      "typeString": "library SafeERC20"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "172039:27:0",
                  "typeName": {
                    "contractScope": null,
                    "id": 5872,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "172059:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  }
                },
                {
                  "constant": true,
                  "id": 5878,
                  "mutability": "constant",
                  "name": "WAD",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7392,
                  "src": "172072:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5874,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172072:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    },
                    "id": 5877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 5875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "172095:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "3138",
                      "id": 5876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "172101:2:0",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_18_by_1",
                        "typeString": "int_const 18"
                      },
                      "value": "18"
                    },
                    "src": "172095:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1000000000000000000_by_1",
                      "typeString": "int_const 1000000000000000000"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3371
                  ],
                  "constant": true,
                  "functionSelector": "174a5be4",
                  "id": 5882,
                  "mutability": "constant",
                  "name": "DL_FACTORY",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5880,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172123:8:0"
                  },
                  "scope": 7392,
                  "src": "172110:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 5879,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "172110:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 5881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "172154:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3377
                  ],
                  "constant": false,
                  "functionSelector": "209b2bca",
                  "id": 5885,
                  "mutability": "immutable",
                  "name": "liquidityAsset",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5884,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172176:8:0"
                  },
                  "scope": 7392,
                  "src": "172162:47:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$77",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5883,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 77,
                    "src": "172162:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$77",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3383
                  ],
                  "constant": false,
                  "functionSelector": "4046af2b",
                  "id": 5888,
                  "mutability": "immutable",
                  "name": "poolDelegate",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5887,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172231:8:0"
                  },
                  "scope": 7392,
                  "src": "172216:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5886,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172216:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3389
                  ],
                  "constant": false,
                  "functionSelector": "9759164a",
                  "id": 5891,
                  "mutability": "immutable",
                  "name": "liquidityLocker",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5890,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172283:8:0"
                  },
                  "scope": 7392,
                  "src": "172268:49:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5889,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172268:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3395
                  ],
                  "constant": false,
                  "functionSelector": "80cd916d",
                  "id": 5894,
                  "mutability": "immutable",
                  "name": "stakeAsset",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5893,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172338:8:0"
                  },
                  "scope": 7392,
                  "src": "172323:44:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5892,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172323:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3401
                  ],
                  "constant": false,
                  "functionSelector": "033b1cf0",
                  "id": 5897,
                  "mutability": "immutable",
                  "name": "stakeLocker",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5896,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172388:8:0"
                  },
                  "scope": 7392,
                  "src": "172373:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5895,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172373:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3407
                  ],
                  "constant": false,
                  "functionSelector": "0d49b38c",
                  "id": 5900,
                  "mutability": "immutable",
                  "name": "superFactory",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5899,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172439:8:0"
                  },
                  "scope": 7392,
                  "src": "172424:46:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5898,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "172424:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 5902,
                  "mutability": "immutable",
                  "name": "liquidityAssetDecimals",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7392,
                  "src": "172477:48:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5901,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172477:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "baseFunctions": [
                    3413
                  ],
                  "constant": false,
                  "functionSelector": "eff98843",
                  "id": 5905,
                  "mutability": "mutable",
                  "name": "stakingFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5904,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172610:8:0"
                  },
                  "scope": 7392,
                  "src": "172595:44:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5903,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172595:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3419
                  ],
                  "constant": false,
                  "functionSelector": "b69410de",
                  "id": 5908,
                  "mutability": "immutable",
                  "name": "delegateFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5907,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172660:8:0"
                  },
                  "scope": 7392,
                  "src": "172645:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5906,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172645:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3425
                  ],
                  "constant": false,
                  "functionSelector": "ac641655",
                  "id": 5911,
                  "mutability": "mutable",
                  "name": "principalOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5910,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172712:8:0"
                  },
                  "scope": 7392,
                  "src": "172697:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5909,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172697:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3431
                  ],
                  "constant": false,
                  "functionSelector": "76687d3d",
                  "id": 5914,
                  "mutability": "mutable",
                  "name": "liquidityCap",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5913,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172754:8:0"
                  },
                  "scope": 7392,
                  "src": "172739:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5912,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172739:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3437
                  ],
                  "constant": false,
                  "functionSelector": "ee947a7c",
                  "id": 5917,
                  "mutability": "mutable",
                  "name": "lockupPeriod",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5916,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172796:8:0"
                  },
                  "scope": 7392,
                  "src": "172781:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5915,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "172781:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3443
                  ],
                  "constant": false,
                  "functionSelector": "1831ccf2",
                  "id": 5920,
                  "mutability": "mutable",
                  "name": "openToPublic",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5919,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172836:8:0"
                  },
                  "scope": 7392,
                  "src": "172824:33:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5918,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "172824:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3449
                  ],
                  "constant": false,
                  "functionSelector": "641ad8a9",
                  "id": 5923,
                  "mutability": "mutable",
                  "name": "poolState",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5922,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172877:8:0"
                  },
                  "scope": 7392,
                  "src": "172864:31:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_State_$3237",
                    "typeString": "enum IPool.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 5921,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3237,
                    "src": "172864:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_State_$3237",
                      "typeString": "enum IPool.State"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3457
                  ],
                  "constant": false,
                  "functionSelector": "24b92e8e",
                  "id": 5928,
                  "mutability": "mutable",
                  "name": "depositDate",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5927,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "172957:8:0"
                  },
                  "scope": 7392,
                  "src": "172902:75:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5926,
                    "keyType": {
                      "id": 5924,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "172910:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "172902:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5925,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "172921:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3467
                  ],
                  "constant": false,
                  "functionSelector": "d7bd3c91",
                  "id": 5935,
                  "mutability": "mutable",
                  "name": "debtLockers",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5934,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173038:8:0"
                  },
                  "scope": 7392,
                  "src": "172983:75:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                    "typeString": "mapping(address => mapping(address => address))"
                  },
                  "typeName": {
                    "id": 5933,
                    "keyType": {
                      "id": 5929,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "172991:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "172983:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                      "typeString": "mapping(address => mapping(address => address))"
                    },
                    "valueType": {
                      "id": 5932,
                      "keyType": {
                        "id": 5930,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "173010:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "173002:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                        "typeString": "mapping(address => address)"
                      },
                      "valueType": {
                        "id": 5931,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "173021:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3475
                  ],
                  "constant": false,
                  "functionSelector": "613384f2",
                  "id": 5940,
                  "mutability": "mutable",
                  "name": "poolAdmins",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5939,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173119:8:0"
                  },
                  "scope": 7392,
                  "src": "173064:74:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5938,
                    "keyType": {
                      "id": 5936,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173072:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173064:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5937,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "173083:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3483
                  ],
                  "constant": false,
                  "functionSelector": "c59e3959",
                  "id": 5945,
                  "mutability": "mutable",
                  "name": "allowedLiquidityProviders",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5944,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173199:8:0"
                  },
                  "scope": 7392,
                  "src": "173144:89:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 5943,
                    "keyType": {
                      "id": 5941,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173152:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173144:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 5942,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "173163:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3491
                  ],
                  "constant": false,
                  "functionSelector": "d82745c8",
                  "id": 5950,
                  "mutability": "mutable",
                  "name": "withdrawCooldown",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5949,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173294:8:0"
                  },
                  "scope": 7392,
                  "src": "173239:80:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5948,
                    "keyType": {
                      "id": 5946,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173247:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173239:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5947,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "173258:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3501
                  ],
                  "constant": false,
                  "functionSelector": "c965b548",
                  "id": 5957,
                  "mutability": "mutable",
                  "name": "custodyAllowance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5956,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173380:8:0"
                  },
                  "scope": 7392,
                  "src": "173325:80:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                    "typeString": "mapping(address => mapping(address => uint256))"
                  },
                  "typeName": {
                    "id": 5955,
                    "keyType": {
                      "id": 5951,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173333:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173325:47:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                      "typeString": "mapping(address => mapping(address => uint256))"
                    },
                    "valueType": {
                      "id": 5954,
                      "keyType": {
                        "id": 5952,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "173352:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "Mapping",
                      "src": "173344:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      },
                      "valueType": {
                        "id": 5953,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "173363:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3509
                  ],
                  "constant": false,
                  "functionSelector": "af6d5571",
                  "id": 5962,
                  "mutability": "mutable",
                  "name": "totalCustodyAllowance",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 5961,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "173466:8:0"
                  },
                  "scope": 7392,
                  "src": "173411:85:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "typeName": {
                    "id": 5960,
                    "keyType": {
                      "id": 5958,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "173419:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "173411:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                      "typeString": "mapping(address => uint256)"
                    },
                    "valueType": {
                      "id": 5959,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "173430:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 6076,
                    "nodeType": "Block",
                    "src": "174972:975:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 5994,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "175070:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 5995,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "175070:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 5993,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "175061:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 5996,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "175061:20:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5997,
                              "name": "_liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5967,
                              "src": "175083:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5998,
                              "name": "_stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5969,
                              "src": "175100:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 5999,
                              "name": "_stakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5975,
                              "src": "175113:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6000,
                              "name": "_delegateFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5977,
                              "src": "175126:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5990,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "175036:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 5992,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "poolSanityChecks",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4882,
                            "src": "175036:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IMapleGlobals,address,address,uint256,uint256) view"
                            }
                          },
                          "id": 6001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "175036:103:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6002,
                        "nodeType": "ExpressionStatement",
                        "src": "175036:103:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6003,
                            "name": "liquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5885,
                            "src": "175211:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6005,
                                "name": "_liquidityAsset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5967,
                                "src": "175243:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6004,
                              "name": "IERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 77,
                              "src": "175236:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
                                "typeString": "type(contract IERC20)"
                              }
                            },
                            "id": 6006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175236:23:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$77",
                              "typeString": "contract IERC20"
                            }
                          },
                          "src": "175211:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20_$77",
                            "typeString": "contract IERC20"
                          }
                        },
                        "id": 6008,
                        "nodeType": "ExpressionStatement",
                        "src": "175211:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6009,
                            "name": "liquidityAssetDecimals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5902,
                            "src": "175269:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6011,
                                    "name": "_liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5967,
                                    "src": "175300:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6010,
                                  "name": "ERC20",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1574,
                                  "src": "175294:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ERC20_$1574_$",
                                    "typeString": "type(contract ERC20)"
                                  }
                                },
                                "id": 6012,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "175294:22:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$1574",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 6013,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1150,
                              "src": "175294:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                                "typeString": "function () view external returns (uint8)"
                              }
                            },
                            "id": 6014,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175294:33:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "175269:58:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6016,
                        "nodeType": "ExpressionStatement",
                        "src": "175269:58:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6017,
                            "name": "stakeAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5894,
                            "src": "175373:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6018,
                            "name": "_stakeAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5969,
                            "src": "175388:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175373:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6020,
                        "nodeType": "ExpressionStatement",
                        "src": "175373:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6021,
                            "name": "poolDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5888,
                            "src": "175409:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6022,
                            "name": "_poolDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5965,
                            "src": "175424:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175409:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6024,
                        "nodeType": "ExpressionStatement",
                        "src": "175409:28:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6025,
                            "name": "stakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5905,
                            "src": "175447:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6026,
                            "name": "_stakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5975,
                            "src": "175462:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "175447:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6028,
                        "nodeType": "ExpressionStatement",
                        "src": "175447:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6029,
                            "name": "delegateFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5908,
                            "src": "175483:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6030,
                            "name": "_delegateFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5977,
                            "src": "175498:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "175483:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6032,
                        "nodeType": "ExpressionStatement",
                        "src": "175483:27:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6033,
                            "name": "superFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5900,
                            "src": "175520:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6034,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "175535:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 6035,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "175535:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "175520:25:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6037,
                        "nodeType": "ExpressionStatement",
                        "src": "175520:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6040,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6038,
                            "name": "liquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5914,
                            "src": "175555:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6039,
                            "name": "_liquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5979,
                            "src": "175570:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "175555:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6041,
                        "nodeType": "ExpressionStatement",
                        "src": "175555:28:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6042,
                            "name": "stakeLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5897,
                            "src": "175658:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6049,
                                    "name": "_stakeAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5969,
                                    "src": "175726:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 6050,
                                    "name": "_liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5967,
                                    "src": "175739:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6046,
                                        "name": "_slFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5971,
                                        "src": "175704:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 6045,
                                      "name": "IStakeLockerFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4156,
                                      "src": "175684:19:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IStakeLockerFactory_$4156_$",
                                        "typeString": "type(contract IStakeLockerFactory)"
                                      }
                                    },
                                    "id": 6047,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "175684:31:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IStakeLockerFactory_$4156",
                                      "typeString": "contract IStakeLockerFactory"
                                    }
                                  },
                                  "id": 6048,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "newLocker",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4155,
                                  "src": "175684:41:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$_t_address_$",
                                    "typeString": "function (address,address) external returns (address)"
                                  }
                                },
                                "id": 6051,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "175684:71:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6044,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "175676:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6043,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "175676:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175676:80:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175658:98:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6054,
                        "nodeType": "ExpressionStatement",
                        "src": "175658:98:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6055,
                            "name": "liquidityLocker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5891,
                            "src": "175766:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6062,
                                    "name": "_liquidityAsset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5967,
                                    "src": "175838:15:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6059,
                                        "name": "_llFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5973,
                                        "src": "175816:10:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 6058,
                                      "name": "ILiquidityLockerFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2946,
                                      "src": "175792:23:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ILiquidityLockerFactory_$2946_$",
                                        "typeString": "type(contract ILiquidityLockerFactory)"
                                      }
                                    },
                                    "id": 6060,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "175792:35:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ILiquidityLockerFactory_$2946",
                                      "typeString": "contract ILiquidityLockerFactory"
                                    }
                                  },
                                  "id": 6061,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "newLocker",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2945,
                                  "src": "175792:45:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_address_$",
                                    "typeString": "function (address) external returns (address)"
                                  }
                                },
                                "id": 6063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "175792:62:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 6057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "175784:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6056,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "175784:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "175784:71:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "175766:89:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6066,
                        "nodeType": "ExpressionStatement",
                        "src": "175766:89:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6069,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6067,
                            "name": "lockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5917,
                            "src": "175866:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "313830",
                            "id": 6068,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "175881:8:0",
                            "subdenomination": "days",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_15552000_by_1",
                              "typeString": "int_const 15552000"
                            },
                            "value": "180"
                          },
                          "src": "175866:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6070,
                        "nodeType": "ExpressionStatement",
                        "src": "175866:23:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6072,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "175922:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Initialized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "175922:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6071,
                            "name": "PoolStateChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3319,
                            "src": "175905:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State)"
                            }
                          },
                          "id": 6074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "175905:35:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6075,
                        "nodeType": "EmitStatement",
                        "src": "175900:40:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5963,
                    "nodeType": "StructuredDocumentation",
                    "src": "173760:863:0",
                    "text": "@dev   Constructor for a Pool. \n@dev   It emits a `PoolStateChanged` event. \n@param _poolDelegate   Address that has manager privileges of the Pool.\n@param _liquidityAsset Asset used to fund the Pool, It gets escrowed in LiquidityLocker.\n@param _stakeAsset     Asset escrowed in StakeLocker.\n@param _slFactory      Factory used to instantiate the StakeLocker.\n@param _llFactory      Factory used to instantiate the LiquidityLocker.\n@param _stakingFee     Fee that Stakers earn on interest, in basis points.\n@param _delegateFee    Fee that the Pool Delegate earns on interest, in basis points.\n@param _liquidityCap   Max amount of Liquidity Asset accepted by the Pool.\n@param name            Name of Pool token.\n@param symbol          Symbol of Pool token."
                  },
                  "id": 6077,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 5986,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5981,
                          "src": "174951:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 5987,
                          "name": "symbol",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5983,
                          "src": "174957:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        }
                      ],
                      "id": 5988,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 5985,
                        "name": "PoolFDT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3230,
                        "src": "174943:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PoolFDT_$3230_$",
                          "typeString": "type(contract PoolFDT)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "174943:21:0"
                    }
                  ],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 5984,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5965,
                        "mutability": "mutable",
                        "name": "_poolDelegate",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174649:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5964,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174649:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5967,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174680:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5966,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174680:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5969,
                        "mutability": "mutable",
                        "name": "_stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174713:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5968,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174713:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5971,
                        "mutability": "mutable",
                        "name": "_slFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174742:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5970,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174742:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5973,
                        "mutability": "mutable",
                        "name": "_llFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174770:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5972,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "174770:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5975,
                        "mutability": "mutable",
                        "name": "_stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174798:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5974,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "174798:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5977,
                        "mutability": "mutable",
                        "name": "_delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174827:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5976,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "174827:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5979,
                        "mutability": "mutable",
                        "name": "_liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174857:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5978,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "174857:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5981,
                        "mutability": "mutable",
                        "name": "name",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174888:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5980,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "174888:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5983,
                        "mutability": "mutable",
                        "name": "symbol",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6077,
                        "src": "174916:20:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5982,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "174916:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "174639:303:0"
                  },
                  "returnParameters": {
                    "id": 5989,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "174972:0:0"
                  },
                  "scope": 7392,
                  "src": "174628:1319:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3513
                  ],
                  "body": {
                    "id": 6108,
                    "nodeType": "Block",
                    "src": "176106:296:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6081,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "176116:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176116:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6083,
                        "nodeType": "ExpressionStatement",
                        "src": "176116:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6085,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "176178:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6086,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Initialized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "176178:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6084,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "176164:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176164:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6088,
                        "nodeType": "ExpressionStatement",
                        "src": "176164:32:0"
                      },
                      {
                        "assignments": [
                          null,
                          null,
                          6090,
                          null,
                          null
                        ],
                        "declarations": [
                          null,
                          null,
                          {
                            "constant": false,
                            "id": 6090,
                            "mutability": "mutable",
                            "name": "stakeSufficient",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6108,
                            "src": "176210:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6089,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "176210:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null,
                          null
                        ],
                        "id": 6093,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6091,
                            "name": "getInitialStakeRequirements",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7185,
                            "src": "176236:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "function () view returns (uint256,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 6092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176236:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,bool,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "176206:59:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6095,
                              "name": "stakeSufficient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6090,
                              "src": "176283:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e5355465f5354414b45",
                              "id": 6096,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "176300:15:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_15e893024b29d889dfd88f4b5984f981da3d8e8590a7f372d8b9985da40a39ac",
                                "typeString": "literal_string \"P:INSUF_STAKE\""
                              },
                              "value": "P:INSUF_STAKE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_15e893024b29d889dfd88f4b5984f981da3d8e8590a7f372d8b9985da40a39ac",
                                "typeString": "literal_string \"P:INSUF_STAKE\""
                              }
                            ],
                            "id": 6094,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "176275:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176275:41:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6098,
                        "nodeType": "ExpressionStatement",
                        "src": "176275:41:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6099,
                            "name": "poolState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5923,
                            "src": "176326:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6100,
                              "name": "State",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3237,
                              "src": "176338:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                "typeString": "type(enum IPool.State)"
                              }
                            },
                            "id": 6101,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Finalized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "176338:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "src": "176326:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "id": 6103,
                        "nodeType": "ExpressionStatement",
                        "src": "176326:27:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6105,
                              "name": "poolState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5923,
                              "src": "176385:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6104,
                            "name": "PoolStateChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3319,
                            "src": "176368:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State)"
                            }
                          },
                          "id": 6106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176368:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6107,
                        "nodeType": "EmitStatement",
                        "src": "176363:32:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4bb278f3",
                  "id": 6109,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "finalize",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6079,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "176097:8:0"
                  },
                  "parameters": {
                    "id": 6078,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176085:2:0"
                  },
                  "returnParameters": {
                    "id": 6080,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176106:0:0"
                  },
                  "scope": 7392,
                  "src": "176068:334:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3523
                  ],
                  "body": {
                    "id": 6148,
                    "nodeType": "Block",
                    "src": "176490:269:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6119,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "176500:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176500:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6121,
                        "nodeType": "ExpressionStatement",
                        "src": "176500:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6123,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "176562:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Finalized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "176562:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6122,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "176548:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176548:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6126,
                        "nodeType": "ExpressionStatement",
                        "src": "176548:30:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6127,
                            "name": "principalOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5911,
                            "src": "176588:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6130,
                                "name": "amt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6115,
                                "src": "176620:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6128,
                                "name": "principalOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5911,
                                "src": "176603:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "176603:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6131,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "176603:21:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "176588:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6133,
                        "nodeType": "ExpressionStatement",
                        "src": "176588:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6137,
                              "name": "debtLockers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5935,
                              "src": "176651:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                "typeString": "mapping(address => mapping(address => address))"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6138,
                              "name": "superFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5900,
                              "src": "176664:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6139,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "176678:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6140,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6111,
                              "src": "176695:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6141,
                              "name": "dlFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6113,
                              "src": "176701:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6142,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6115,
                              "src": "176712:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                "typeString": "mapping(address => mapping(address => address))"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6134,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "176634:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fundLoan",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4997,
                            "src": "176634:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$_$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (mapping(address => mapping(address => address)),address,address,address,address,uint256)"
                            }
                          },
                          "id": 6143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176634:82:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6144,
                        "nodeType": "ExpressionStatement",
                        "src": "176634:82:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6145,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "176726:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176726:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6147,
                        "nodeType": "ExpressionStatement",
                        "src": "176726:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "1aa37cec",
                  "id": 6149,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "fundLoan",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6117,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "176481:8:0"
                  },
                  "parameters": {
                    "id": 6116,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6111,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6149,
                        "src": "176426:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176426:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6113,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6149,
                        "src": "176440:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6112,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176440:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6115,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6149,
                        "src": "176459:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6114,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "176459:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "176425:46:0"
                  },
                  "returnParameters": {
                    "id": 6118,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176490:0:0"
                  },
                  "scope": 7392,
                  "src": "176408:351:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3531
                  ],
                  "body": {
                    "id": 6170,
                    "nodeType": "Block",
                    "src": "176840:123:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6157,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "176850:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176850:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6159,
                        "nodeType": "ExpressionStatement",
                        "src": "176850:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6161,
                                      "name": "debtLockers",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5935,
                                      "src": "176910:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                        "typeString": "mapping(address => mapping(address => address))"
                                      }
                                    },
                                    "id": 6163,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6162,
                                      "name": "loan",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6151,
                                      "src": "176922:4:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "176910:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                      "typeString": "mapping(address => address)"
                                    }
                                  },
                                  "id": 6165,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 6164,
                                    "name": "dlFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6153,
                                    "src": "176928:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "176910:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6160,
                                "name": "IDebtLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 588,
                                "src": "176898:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IDebtLocker_$588_$",
                                  "typeString": "type(contract IDebtLocker)"
                                }
                              },
                              "id": 6166,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "176898:41:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IDebtLocker_$588",
                                "typeString": "contract IDebtLocker"
                              }
                            },
                            "id": 6167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "triggerDefault",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 587,
                            "src": "176898:56:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                              "typeString": "function () external"
                            }
                          },
                          "id": 6168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "176898:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6169,
                        "nodeType": "ExpressionStatement",
                        "src": "176898:58:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "40504ba0",
                  "id": 6171,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "triggerDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6155,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "176831:8:0"
                  },
                  "parameters": {
                    "id": 6154,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6151,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6171,
                        "src": "176789:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6150,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176789:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6153,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6171,
                        "src": "176803:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6152,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176803:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "176788:33:0"
                  },
                  "returnParameters": {
                    "id": 6156,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "176840:0:0"
                  },
                  "scope": 7392,
                  "src": "176765:198:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3543
                  ],
                  "body": {
                    "id": 6318,
                    "nodeType": "Block",
                    "src": "177073:2628:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6183,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "177083:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "177083:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6185,
                        "nodeType": "ExpressionStatement",
                        "src": "177083:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6186,
                            "name": "_isValidDelegateOrPoolAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7349,
                            "src": "177117:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "177117:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6188,
                        "nodeType": "ExpressionStatement",
                        "src": "177117:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6189,
                            "name": "claimInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6181,
                            "src": "177156:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                              "typeString": "uint256[7] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 6191,
                                        "name": "debtLockers",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5935,
                                        "src": "177180:11:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_address_$_$",
                                          "typeString": "mapping(address => mapping(address => address))"
                                        }
                                      },
                                      "id": 6193,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 6192,
                                        "name": "loan",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6173,
                                        "src": "177192:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "177180:17:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                        "typeString": "mapping(address => address)"
                                      }
                                    },
                                    "id": 6195,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6194,
                                      "name": "dlFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6175,
                                      "src": "177198:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "177180:28:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6190,
                                  "name": "IDebtLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 588,
                                  "src": "177168:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IDebtLocker_$588_$",
                                    "typeString": "type(contract IDebtLocker)"
                                  }
                                },
                                "id": 6196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "177168:41:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IDebtLocker_$588",
                                  "typeString": "contract IDebtLocker"
                                }
                              },
                              "id": 6197,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claim",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 583,
                              "src": "177168:47:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_array$_t_uint256_$7_memory_ptr_$",
                                "typeString": "function () external returns (uint256[7] memory)"
                              }
                            },
                            "id": 6198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "177168:49:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                              "typeString": "uint256[7] memory"
                            }
                          },
                          "src": "177156:61:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                            "typeString": "uint256[7] memory"
                          }
                        },
                        "id": 6200,
                        "nodeType": "ExpressionStatement",
                        "src": "177156:61:0"
                      },
                      {
                        "assignments": [
                          6202,
                          6204,
                          6206,
                          6208
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6202,
                            "mutability": "mutable",
                            "name": "poolDelegatePortion",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177229:27:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6201,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177229:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6204,
                            "mutability": "mutable",
                            "name": "stakeLockerPortion",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177258:26:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6203,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177258:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6206,
                            "mutability": "mutable",
                            "name": "principalClaim",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177286:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6205,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177286:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6208,
                            "mutability": "mutable",
                            "name": "interestClaim",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6318,
                            "src": "177310:21:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6207,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "177310:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6215,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6211,
                              "name": "claimInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6181,
                              "src": "177369:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                "typeString": "uint256[7] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6212,
                              "name": "delegateFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5908,
                              "src": "177380:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6213,
                              "name": "stakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5905,
                              "src": "177393:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                "typeString": "uint256[7] memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6209,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "177335:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6210,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "calculateClaimAndPortions",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5213,
                            "src": "177335:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_pure$_t_array$_t_uint256_$7_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (uint256[7] memory,uint256,uint256) pure returns (uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 6214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "177335:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "177228:176:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6218,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6216,
                            "name": "principalClaim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6206,
                            "src": "177622:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6217,
                            "name": "principalOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5911,
                            "src": "177640:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "177622:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6243,
                          "nodeType": "Block",
                          "src": "177729:450:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6233,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6226,
                                  "name": "interestClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "177743:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6231,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6229,
                                        "name": "principalClaim",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6206,
                                        "src": "177778:14:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6230,
                                        "name": "principalOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5911,
                                        "src": "177795:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "177778:29:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6227,
                                      "name": "interestClaim",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6208,
                                      "src": "177760:13:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6228,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 711,
                                    "src": "177760:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6232,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "177760:48:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "177743:65:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6234,
                              "nodeType": "ExpressionStatement",
                              "src": "177743:65:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6237,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6235,
                                  "name": "principalClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6206,
                                  "src": "177883:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 6236,
                                  "name": "principalOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5911,
                                  "src": "177900:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "177883:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6238,
                              "nodeType": "ExpressionStatement",
                              "src": "177883:29:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6241,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6239,
                                  "name": "principalOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5911,
                                  "src": "178041:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6240,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "178058:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "178041:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6242,
                              "nodeType": "ExpressionStatement",
                              "src": "178041:18:0"
                            }
                          ]
                        },
                        "id": 6244,
                        "nodeType": "IfStatement",
                        "src": "177618:561:0",
                        "trueBody": {
                          "id": 6225,
                          "nodeType": "Block",
                          "src": "177654:69:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6219,
                                  "name": "principalOut",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5911,
                                  "src": "177668:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 6220,
                                    "name": "principalOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5911,
                                    "src": "177683:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 6221,
                                    "name": "principalClaim",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6206,
                                    "src": "177698:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "177683:29:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "177668:44:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6224,
                              "nodeType": "ExpressionStatement",
                              "src": "177668:44:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6250,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6245,
                            "name": "interestSum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "178293:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6248,
                                "name": "interestClaim",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6208,
                                "src": "178323:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6246,
                                "name": "interestSum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3131,
                                "src": "178307:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6247,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 711,
                              "src": "178307:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6249,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "178307:30:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "178293:44:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6251,
                        "nodeType": "ExpressionStatement",
                        "src": "178293:44:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6253,
                              "name": "poolDelegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5888,
                              "src": "178372:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6254,
                              "name": "poolDelegatePortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6202,
                              "src": "178386:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6252,
                            "name": "_transferLiquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7331,
                            "src": "178348:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "178348:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6256,
                        "nodeType": "ExpressionStatement",
                        "src": "178348:58:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6258,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "178507:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6259,
                              "name": "stakeLockerPortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6204,
                              "src": "178521:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6257,
                            "name": "_transferLiquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7331,
                            "src": "178483:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "178483:57:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6261,
                        "nodeType": "ExpressionStatement",
                        "src": "178483:57:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6263,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "179079:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6266,
                                  "name": "interestClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6208,
                                  "src": "179115:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6264,
                                  "name": "principalClaim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6206,
                                  "src": "179096:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 711,
                                "src": "179096:18:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179096:33:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6262,
                            "name": "_transferLiquidityAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7331,
                            "src": "179055:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6268,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179055:75:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6269,
                        "nodeType": "ExpressionStatement",
                        "src": "179055:75:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6270,
                              "name": "claimInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6181,
                              "src": "179195:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                "typeString": "uint256[7] memory"
                              }
                            },
                            "id": 6272,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "36",
                              "id": 6271,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "179205:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6_by_1",
                                "typeString": "int_const 6"
                              },
                              "value": "6"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "179195:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 6273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "179210:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "179195:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6282,
                        "nodeType": "IfStatement",
                        "src": "179191:56:0",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6276,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6173,
                                "src": "179228:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6277,
                                  "name": "claimInfo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6181,
                                  "src": "179234:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                    "typeString": "uint256[7] memory"
                                  }
                                },
                                "id": 6279,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "36",
                                  "id": 6278,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "179244:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_6_by_1",
                                    "typeString": "int_const 6"
                                  },
                                  "value": "6"
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "179234:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6275,
                              "name": "_handleDefault",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6381,
                              "src": "179213:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,uint256)"
                              }
                            },
                            "id": 6280,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "179213:34:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 6281,
                          "nodeType": "ExpressionStatement",
                          "src": "179213:34:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6284,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5897,
                                  "src": "179325:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6283,
                                "name": "IStakeLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4104,
                                "src": "179312:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IStakeLocker_$4104_$",
                                  "typeString": "type(contract IStakeLocker)"
                                }
                              },
                              "id": 6285,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179312:25:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IStakeLocker_$4104",
                                "typeString": "contract IStakeLocker"
                              }
                            },
                            "id": 6286,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateFundsReceived",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 140,
                            "src": "179312:45:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                              "typeString": "function () external"
                            }
                          },
                          "id": 6287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179312:47:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6288,
                        "nodeType": "ExpressionStatement",
                        "src": "179312:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6289,
                            "name": "updateFundsReceived",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1945,
                            "src": "179417:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179417:21:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6291,
                        "nodeType": "ExpressionStatement",
                        "src": "179417:21:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6292,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "179449:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179449:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6294,
                        "nodeType": "ExpressionStatement",
                        "src": "179449:26:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6296,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "179505:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6299,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "179526:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 6298,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "179518:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6297,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "179518:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6300,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179518:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6303,
                                  "name": "stakeLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5897,
                                  "src": "179568:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6301,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "179543:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 6302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 16,
                                "src": "179543:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 6304,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "179543:37:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6295,
                            "name": "BalanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3270,
                            "src": "179490:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 6305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179490:91:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6306,
                        "nodeType": "EmitStatement",
                        "src": "179485:96:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6308,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6173,
                              "src": "179603:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6309,
                              "name": "interestClaim",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6208,
                              "src": "179609:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6310,
                              "name": "principalClaim",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6206,
                              "src": "179624:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6311,
                                "name": "claimInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6181,
                                "src": "179640:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                                  "typeString": "uint256[7] memory"
                                }
                              },
                              "id": 6313,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 6312,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "179650:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "179640:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6314,
                              "name": "stakeLockerPortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6204,
                              "src": "179654:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6315,
                              "name": "poolDelegatePortion",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6202,
                              "src": "179674:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6307,
                            "name": "Claim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3261,
                            "src": "179597:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 6316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "179597:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6317,
                        "nodeType": "EmitStatement",
                        "src": "179592:102:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "21c0b342",
                  "id": 6319,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "claim",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6177,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "177026:8:0"
                  },
                  "parameters": {
                    "id": 6176,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6173,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6319,
                        "src": "176984:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6172,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176984:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6175,
                        "mutability": "mutable",
                        "name": "dlFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6319,
                        "src": "176998:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6174,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "176998:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "176983:33:0"
                  },
                  "returnParameters": {
                    "id": 6182,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6181,
                        "mutability": "mutable",
                        "name": "claimInfo",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6319,
                        "src": "177044:27:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$7_memory_ptr",
                          "typeString": "uint256[7]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 6178,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "177044:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6180,
                          "length": {
                            "argumentTypes": null,
                            "hexValue": "37",
                            "id": 6179,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "177052:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_7_by_1",
                              "typeString": "int_const 7"
                            },
                            "value": "7"
                          },
                          "nodeType": "ArrayTypeName",
                          "src": "177044:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$7_storage_ptr",
                            "typeString": "uint256[7]"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "177043:29:0"
                  },
                  "scope": 7392,
                  "src": "176969:2732:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 6380,
                    "nodeType": "Block",
                    "src": "180100:1306:0",
                    "statements": [
                      {
                        "assignments": [
                          6328,
                          6330,
                          6332
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6328,
                            "mutability": "mutable",
                            "name": "bptsBurned",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6380,
                            "src": "180112:18:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6327,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "180112:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6330,
                            "mutability": "mutable",
                            "name": "postBurnBptBal",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6380,
                            "src": "180132:22:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6329,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "180132:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6332,
                            "mutability": "mutable",
                            "name": "liquidityAssetRecoveredFromBurn",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6380,
                            "src": "180156:39:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6331,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "180156:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6340,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6335,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "180221:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6336,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "180237:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6337,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5894,
                              "src": "180250:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6338,
                              "name": "defaultSuffered",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6324,
                              "src": "180262:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6333,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "180199:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "handleDefault",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5127,
                            "src": "180199:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IERC20,address,address,uint256) returns (uint256,uint256,uint256)"
                            }
                          },
                          "id": 6339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "180199:79:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "180111:167:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6341,
                            "name": "defaultSuffered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6324,
                            "src": "180412:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 6342,
                            "name": "liquidityAssetRecoveredFromBurn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6332,
                            "src": "180430:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "180412:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6357,
                        "nodeType": "IfStatement",
                        "src": "180408:194:0",
                        "trueBody": {
                          "id": 6356,
                          "nodeType": "Block",
                          "src": "180463:139:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 6351,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 6344,
                                  "name": "poolLosses",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3134,
                                  "src": "180477:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6349,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "id": 6347,
                                        "name": "defaultSuffered",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6324,
                                        "src": "180505:15:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "-",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6348,
                                        "name": "liquidityAssetRecoveredFromBurn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6332,
                                        "src": "180523:31:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "180505:49:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6345,
                                      "name": "poolLosses",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3134,
                                      "src": "180490:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 6346,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 711,
                                    "src": "180490:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6350,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "180490:65:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "180477:78:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6352,
                              "nodeType": "ExpressionStatement",
                              "src": "180477:78:0"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 6353,
                                  "name": "updateLossesReceived",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2364,
                                  "src": "180569:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 6354,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "180569:22:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6355,
                              "nodeType": "ExpressionStatement",
                              "src": "180569:22:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6361,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "180706:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6362,
                              "name": "liquidityAssetRecoveredFromBurn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6332,
                              "src": "180723:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6358,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "180678:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4601,
                            "src": "180678:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 6363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "180678:77:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6364,
                        "nodeType": "ExpressionStatement",
                        "src": "180678:77:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6365,
                            "name": "principalOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5911,
                            "src": "180766:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6368,
                                "name": "defaultSuffered",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6324,
                                "src": "180798:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6366,
                                "name": "principalOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5911,
                                "src": "180781:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "180781:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6369,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "180781:33:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "180766:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6371,
                        "nodeType": "ExpressionStatement",
                        "src": "180766:48:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6373,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6322,
                              "src": "180922:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6374,
                              "name": "defaultSuffered",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6324,
                              "src": "181006:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6375,
                              "name": "bptsBurned",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6328,
                              "src": "181122:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6376,
                              "name": "postBurnBptBal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6330,
                              "src": "181210:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6377,
                              "name": "liquidityAssetRecoveredFromBurn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6332,
                              "src": "181299:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6372,
                            "name": "DefaultSuffered",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3365,
                            "src": "180893:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256,uint256)"
                            }
                          },
                          "id": 6378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "180893:506:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6379,
                        "nodeType": "EmitStatement",
                        "src": "180888:511:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6320,
                    "nodeType": "StructuredDocumentation",
                    "src": "179707:316:0",
                    "text": "@dev   Handles if a claim has been made and there is a non-zero defaultSuffered amount. \n@dev   It emits a `DefaultSuffered` event. \n@param loan            The address of a Loan that has defaulted.\n@param defaultSuffered The losses suffered from default after liquidation."
                  },
                  "id": 6381,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_handleDefault",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 6325,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6322,
                        "mutability": "mutable",
                        "name": "loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6381,
                        "src": "180052:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6321,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "180052:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6324,
                        "mutability": "mutable",
                        "name": "defaultSuffered",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6381,
                        "src": "180066:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6323,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "180066:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "180051:39:0"
                  },
                  "returnParameters": {
                    "id": 6326,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "180100:0:0"
                  },
                  "scope": 7392,
                  "src": "180028:1378:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3547
                  ],
                  "body": {
                    "id": 6415,
                    "nodeType": "Block",
                    "src": "181452:277:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6385,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "181462:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181462:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6387,
                        "nodeType": "ExpressionStatement",
                        "src": "181462:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6389,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "181524:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6390,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Finalized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "181524:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6388,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "181510:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181510:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6392,
                        "nodeType": "ExpressionStatement",
                        "src": "181510:30:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6397,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "181588:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6396,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "181579:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 6398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "181579:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6399,
                              "name": "principalOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5911,
                              "src": "181603:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6402,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "181625:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 6401,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "181617:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 6400,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "181617:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6403,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "181617:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6393,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "181550:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "validateDeactivation",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5235,
                            "src": "181550:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_contract$_IMapleGlobals_$2870_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (contract IMapleGlobals,uint256,address) view"
                            }
                          },
                          "id": 6404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181550:91:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6405,
                        "nodeType": "ExpressionStatement",
                        "src": "181550:91:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6406,
                            "name": "poolState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5923,
                            "src": "181651:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6407,
                              "name": "State",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3237,
                              "src": "181663:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                "typeString": "type(enum IPool.State)"
                              }
                            },
                            "id": 6408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Deactivated",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "181663:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "src": "181651:29:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "id": 6410,
                        "nodeType": "ExpressionStatement",
                        "src": "181651:29:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6412,
                              "name": "poolState",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5923,
                              "src": "181712:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6411,
                            "name": "PoolStateChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3319,
                            "src": "181695:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State)"
                            }
                          },
                          "id": 6413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181695:27:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6414,
                        "nodeType": "EmitStatement",
                        "src": "181690:32:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "51b42b00",
                  "id": 6416,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deactivate",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6383,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "181443:8:0"
                  },
                  "parameters": {
                    "id": 6382,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "181431:2:0"
                  },
                  "returnParameters": {
                    "id": 6384,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "181452:0:0"
                  },
                  "scope": 7392,
                  "src": "181412:317:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3553
                  ],
                  "body": {
                    "id": 6436,
                    "nodeType": "Block",
                    "src": "181939:167:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6422,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "181949:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181949:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6424,
                        "nodeType": "ExpressionStatement",
                        "src": "181949:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6425,
                            "name": "_isValidDelegateOrPoolAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7349,
                            "src": "181983:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "181983:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6427,
                        "nodeType": "ExpressionStatement",
                        "src": "181983:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6428,
                            "name": "liquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5914,
                            "src": "182022:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6429,
                            "name": "newLiquidityCap",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6418,
                            "src": "182037:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "182022:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6431,
                        "nodeType": "ExpressionStatement",
                        "src": "182022:30:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6433,
                              "name": "newLiquidityCap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6418,
                              "src": "182083:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6432,
                            "name": "LiquidityCapSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3304,
                            "src": "182067:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 6434,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182067:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6435,
                        "nodeType": "EmitStatement",
                        "src": "182062:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "7b99adb1",
                  "id": 6437,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLiquidityCap",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6420,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "181930:8:0"
                  },
                  "parameters": {
                    "id": 6419,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6418,
                        "mutability": "mutable",
                        "name": "newLiquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6437,
                        "src": "181896:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6417,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "181896:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "181895:25:0"
                  },
                  "returnParameters": {
                    "id": 6421,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "181939:0:0"
                  },
                  "scope": 7392,
                  "src": "181871:235:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3559
                  ],
                  "body": {
                    "id": 6461,
                    "nodeType": "Block",
                    "src": "182180:207:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6443,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182190:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182190:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6445,
                        "nodeType": "ExpressionStatement",
                        "src": "182190:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 6447,
                                "name": "newLockupPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6439,
                                "src": "182246:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6448,
                                "name": "lockupPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5917,
                                "src": "182265:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "182246:31:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4241445f56414c5545",
                              "id": 6450,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "182279:13:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b95d13420411b48f18d4e0a9f6076e62a4a732d1215cbcd69016fcf03726c75d",
                                "typeString": "literal_string \"P:BAD_VALUE\""
                              },
                              "value": "P:BAD_VALUE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b95d13420411b48f18d4e0a9f6076e62a4a732d1215cbcd69016fcf03726c75d",
                                "typeString": "literal_string \"P:BAD_VALUE\""
                              }
                            ],
                            "id": 6446,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "182238:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6451,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182238:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6452,
                        "nodeType": "ExpressionStatement",
                        "src": "182238:55:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6455,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6453,
                            "name": "lockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5917,
                            "src": "182303:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6454,
                            "name": "newLockupPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6439,
                            "src": "182318:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "182303:30:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6456,
                        "nodeType": "ExpressionStatement",
                        "src": "182303:30:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6458,
                              "name": "newLockupPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6439,
                              "src": "182364:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6457,
                            "name": "LockupPeriodSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3309,
                            "src": "182348:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 6459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182348:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6460,
                        "nodeType": "EmitStatement",
                        "src": "182343:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "c771c390",
                  "id": 6462,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setLockupPeriod",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6441,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182171:8:0"
                  },
                  "parameters": {
                    "id": 6440,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6439,
                        "mutability": "mutable",
                        "name": "newLockupPeriod",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6462,
                        "src": "182137:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6438,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "182137:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182136:25:0"
                  },
                  "returnParameters": {
                    "id": 6442,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182180:0:0"
                  },
                  "scope": 7392,
                  "src": "182112:275:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3565
                  ],
                  "body": {
                    "id": 6489,
                    "nodeType": "Block",
                    "src": "182457:206:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6468,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182467:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182467:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6470,
                        "nodeType": "ExpressionStatement",
                        "src": "182467:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6474,
                                    "name": "delegateFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5908,
                                    "src": "182541:11:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6472,
                                    "name": "newStakingFee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6464,
                                    "src": "182523:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6473,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "182523:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6475,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "182523:30:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31305f303030",
                                "id": 6476,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "182557:6:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "value": "10_000"
                              },
                              "src": "182523:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4241445f464545",
                              "id": 6478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "182565:11:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fd650ed71f4d0a98e5259200e14d6e43239e48299305a76b059f50cbbfa7cc77",
                                "typeString": "literal_string \"P:BAD_FEE\""
                              },
                              "value": "P:BAD_FEE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fd650ed71f4d0a98e5259200e14d6e43239e48299305a76b059f50cbbfa7cc77",
                                "typeString": "literal_string \"P:BAD_FEE\""
                              }
                            ],
                            "id": 6471,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "182515:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6479,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182515:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6480,
                        "nodeType": "ExpressionStatement",
                        "src": "182515:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6481,
                            "name": "stakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5905,
                            "src": "182587:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6482,
                            "name": "newStakingFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6464,
                            "src": "182600:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "182587:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6484,
                        "nodeType": "ExpressionStatement",
                        "src": "182587:26:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6486,
                              "name": "newStakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6464,
                              "src": "182642:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6485,
                            "name": "StakingFeeSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3314,
                            "src": "182628:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 6487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182628:28:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6488,
                        "nodeType": "EmitStatement",
                        "src": "182623:33:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "410dbf7e",
                  "id": 6490,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setStakingFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6466,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182448:8:0"
                  },
                  "parameters": {
                    "id": 6465,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6464,
                        "mutability": "mutable",
                        "name": "newStakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6490,
                        "src": "182416:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6463,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "182416:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182415:23:0"
                  },
                  "returnParameters": {
                    "id": 6467,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182457:0:0"
                  },
                  "scope": 7392,
                  "src": "182393:270:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3573
                  ],
                  "body": {
                    "id": 6512,
                    "nodeType": "Block",
                    "src": "182739:155:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6498,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182749:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182749:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6500,
                        "nodeType": "ExpressionStatement",
                        "src": "182749:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6505,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6501,
                              "name": "allowedLiquidityProviders",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5945,
                              "src": "182797:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6503,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6502,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6492,
                              "src": "182823:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "182797:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6504,
                            "name": "status",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6494,
                            "src": "182834:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "182797:43:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6506,
                        "nodeType": "ExpressionStatement",
                        "src": "182797:43:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6508,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6492,
                              "src": "182871:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6509,
                              "name": "status",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6494,
                              "src": "182880:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6507,
                            "name": "LPStatusChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3299,
                            "src": "182855:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 6510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182855:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6511,
                        "nodeType": "EmitStatement",
                        "src": "182850:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "7666f125",
                  "id": 6513,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setAllowList",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6496,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182730:8:0"
                  },
                  "parameters": {
                    "id": 6495,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6492,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6513,
                        "src": "182691:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6491,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "182691:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6494,
                        "mutability": "mutable",
                        "name": "status",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6513,
                        "src": "182708:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6493,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "182708:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182690:30:0"
                  },
                  "returnParameters": {
                    "id": 6497,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182739:0:0"
                  },
                  "scope": 7392,
                  "src": "182669:225:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3581
                  ],
                  "body": {
                    "id": 6535,
                    "nodeType": "Block",
                    "src": "182973:143:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6521,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "182983:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "182983:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6523,
                        "nodeType": "ExpressionStatement",
                        "src": "182983:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6528,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6524,
                              "name": "poolAdmins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5940,
                              "src": "183031:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 6526,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6525,
                              "name": "poolAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6515,
                              "src": "183042:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "183031:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6527,
                            "name": "allowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6517,
                            "src": "183055:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "183031:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6529,
                        "nodeType": "ExpressionStatement",
                        "src": "183031:31:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6531,
                              "name": "poolAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6515,
                              "src": "183090:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6532,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6517,
                              "src": "183101:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6530,
                            "name": "PoolAdminSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3338,
                            "src": "183077:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 6533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183077:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6534,
                        "nodeType": "EmitStatement",
                        "src": "183072:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "9185192a",
                  "id": 6536,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6519,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "182964:8:0"
                  },
                  "parameters": {
                    "id": 6518,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6515,
                        "mutability": "mutable",
                        "name": "poolAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6536,
                        "src": "182922:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6514,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "182922:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6517,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6536,
                        "src": "182941:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6516,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "182941:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "182921:33:0"
                  },
                  "returnParameters": {
                    "id": 6520,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "182973:0:0"
                  },
                  "scope": 7392,
                  "src": "182900:216:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3587
                  ],
                  "body": {
                    "id": 6553,
                    "nodeType": "Block",
                    "src": "183176:123:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6542,
                            "name": "_isValidDelegateAndProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7375,
                            "src": "183186:36:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183186:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6544,
                        "nodeType": "ExpressionStatement",
                        "src": "183186:38:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6545,
                            "name": "openToPublic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5920,
                            "src": "183234:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6546,
                            "name": "open",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6538,
                            "src": "183249:4:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "183234:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6548,
                        "nodeType": "ExpressionStatement",
                        "src": "183234:19:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6550,
                              "name": "open",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6538,
                              "src": "183287:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 6549,
                            "name": "PoolOpenedToPublic",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3331,
                            "src": "183268:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$",
                              "typeString": "function (bool)"
                            }
                          },
                          "id": 6551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183268:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6552,
                        "nodeType": "EmitStatement",
                        "src": "183263:29:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "a43baa3d",
                  "id": 6554,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setOpenToPublic",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6540,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "183167:8:0"
                  },
                  "parameters": {
                    "id": 6539,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6538,
                        "mutability": "mutable",
                        "name": "open",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6554,
                        "src": "183147:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6537,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "183147:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "183146:11:0"
                  },
                  "returnParameters": {
                    "id": 6541,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "183176:0:0"
                  },
                  "scope": 7392,
                  "src": "183122:177:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3593
                  ],
                  "body": {
                    "id": 6631,
                    "nodeType": "Block",
                    "src": "183483:592:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6560,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "183493:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183493:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6562,
                        "nodeType": "ExpressionStatement",
                        "src": "183493:24:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6564,
                                "name": "State",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3237,
                                "src": "183541:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                  "typeString": "type(enum IPool.State)"
                                }
                              },
                              "id": 6565,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "Finalized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183541:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              }
                            ],
                            "id": 6563,
                            "name": "_isValidState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7270,
                            "src": "183527:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_enum$_State_$3237_$returns$__$",
                              "typeString": "function (enum IPool.State) view"
                            }
                          },
                          "id": 6566,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183527:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6567,
                        "nodeType": "ExpressionStatement",
                        "src": "183527:30:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6570,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6556,
                                  "src": "183592:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6569,
                                "name": "isDepositAllowed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7156,
                                "src": "183575:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (uint256) view returns (bool)"
                                }
                              },
                              "id": 6571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "183575:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4445505f4e4f545f414c4c4f574544",
                              "id": 6572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "183598:19:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b1bed0e3c4c360e8c8f7710b3ae9e4f79e378f70781415028aa0ea288bf988c8",
                                "typeString": "literal_string \"P:DEP_NOT_ALLOWED\""
                              },
                              "value": "P:DEP_NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b1bed0e3c4c360e8c8f7710b3ae9e4f79e378f70781415028aa0ea288bf988c8",
                                "typeString": "literal_string \"P:DEP_NOT_ALLOWED\""
                              }
                            ],
                            "id": 6568,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "183567:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183567:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6574,
                        "nodeType": "ExpressionStatement",
                        "src": "183567:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6575,
                              "name": "withdrawCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5950,
                              "src": "183629:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6578,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6576,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183646:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6577,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183646:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "183629:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6581,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "183668:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6580,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "183660:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 6579,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "183660:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6582,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "183660:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "183629:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6584,
                        "nodeType": "ExpressionStatement",
                        "src": "183629:41:0"
                      },
                      {
                        "assignments": [
                          6586
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6586,
                            "mutability": "mutable",
                            "name": "wad",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6631,
                            "src": "183763:11:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6585,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "183763:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6590,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6588,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6556,
                              "src": "183784:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6587,
                            "name": "_toWad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7244,
                            "src": "183777:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) view returns (uint256)"
                            }
                          },
                          "id": 6589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183777:11:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "183763:25:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6594,
                              "name": "depositDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5928,
                              "src": "183824:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6596,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "183847:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 6597,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "183847:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 6595,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1174,
                                "src": "183837:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 6598,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "183837:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6599,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6586,
                              "src": "183860:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6600,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183865:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183865:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6591,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "183798:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateDepositDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5294,
                            "src": "183798:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (mapping(address => uint256),uint256,uint256,address)"
                            }
                          },
                          "id": 6602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183798:78:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6603,
                        "nodeType": "ExpressionStatement",
                        "src": "183798:78:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6607,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183919:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6608,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183919:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6609,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "183931:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6610,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6556,
                              "src": "183948:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6604,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "183887:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 6606,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4626,
                            "src": "183887:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 6611,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183887:65:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6612,
                        "nodeType": "ExpressionStatement",
                        "src": "183887:65:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6614,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "183968:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6615,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "183968:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6616,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6586,
                              "src": "183980:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6613,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2300
                            ],
                            "referencedDeclaration": 2300,
                            "src": "183962:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6617,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183962:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6618,
                        "nodeType": "ExpressionStatement",
                        "src": "183962:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6619,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "183995:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "183995:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6621,
                        "nodeType": "ExpressionStatement",
                        "src": "183995:26:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6623,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184045:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6624,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184045:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6627,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "184065:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 6626,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "184057:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 6625,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "184057:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "184057:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6622,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3326,
                            "src": "184036:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184036:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6630,
                        "nodeType": "EmitStatement",
                        "src": "184031:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "b6b55f25",
                  "id": 6632,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deposit",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6558,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "183474:8:0"
                  },
                  "parameters": {
                    "id": 6557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6556,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6632,
                        "src": "183452:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "183452:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "183451:13:0"
                  },
                  "returnParameters": {
                    "id": 6559,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "183483:0:0"
                  },
                  "scope": 7392,
                  "src": "183435:640:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3597
                  ],
                  "body": {
                    "id": 6664,
                    "nodeType": "Block",
                    "src": "184127:183:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 6638,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "184155:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 6639,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "184155:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 6637,
                                  "name": "balanceOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1174,
                                  "src": "184145:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 6640,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184145:21:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6643,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "184178:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6642,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "184170:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6641,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "184170:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 6644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184170:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184145:35:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a5a45524f5f42414c",
                              "id": 6646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "184182:12:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a1f8e3f37a19d51fe37ff3e329ba0d1390187176069ea1d2f0748a14f1a3f585",
                                "typeString": "literal_string \"P:ZERO_BAL\""
                              },
                              "value": "P:ZERO_BAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a1f8e3f37a19d51fe37ff3e329ba0d1390187176069ea1d2f0748a14f1a3f585",
                                "typeString": "literal_string \"P:ZERO_BAL\""
                              }
                            ],
                            "id": 6636,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184137:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184137:58:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6648,
                        "nodeType": "ExpressionStatement",
                        "src": "184137:58:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6649,
                              "name": "withdrawCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5950,
                              "src": "184205:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6652,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6650,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184222:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184222:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "184205:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 6653,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "184236:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 6654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "184236:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "184205:46:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6656,
                        "nodeType": "ExpressionStatement",
                        "src": "184205:46:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6658,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184275:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6659,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184275:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6660,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "184287:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 6661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184287:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6657,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3326,
                            "src": "184266:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184266:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6663,
                        "nodeType": "EmitStatement",
                        "src": "184261:42:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "73ef9a50",
                  "id": 6665,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "intendToWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6634,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "184118:8:0"
                  },
                  "parameters": {
                    "id": 6633,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184106:2:0"
                  },
                  "returnParameters": {
                    "id": 6635,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184127:0:0"
                  },
                  "scope": 7392,
                  "src": "184081:229:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3601
                  ],
                  "body": {
                    "id": 6701,
                    "nodeType": "Block",
                    "src": "184360:187:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6670,
                                  "name": "withdrawCooldown",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5950,
                                  "src": "184378:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 6673,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6671,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "184395:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 6672,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "184395:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "184378:28:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6676,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "184418:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "184410:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6674,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "184410:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 6677,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184410:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184378:42:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f5749544844524157494e47",
                              "id": 6679,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "184422:19:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c46b07d1710ac7fb6e170141753c6cb6f0c52f5a44af3f9c301263235266de4e",
                                "typeString": "literal_string \"P:NOT_WITHDRAWING\""
                              },
                              "value": "P:NOT_WITHDRAWING"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c46b07d1710ac7fb6e170141753c6cb6f0c52f5a44af3f9c301263235266de4e",
                                "typeString": "literal_string \"P:NOT_WITHDRAWING\""
                              }
                            ],
                            "id": 6669,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184370:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6680,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184370:72:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6681,
                        "nodeType": "ExpressionStatement",
                        "src": "184370:72:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6682,
                              "name": "withdrawCooldown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5950,
                              "src": "184452:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6685,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6683,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184469:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6684,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184469:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "184452:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6688,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "184491:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "184483:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 6686,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "184483:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6689,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "184483:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "184452:41:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6691,
                        "nodeType": "ExpressionStatement",
                        "src": "184452:41:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6693,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "184517:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6694,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "184517:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 6697,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "184537:1:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 6696,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "184529:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 6695,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "184529:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 6698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "184529:10:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6692,
                            "name": "Cooldown",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3326,
                            "src": "184508:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184508:32:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6700,
                        "nodeType": "EmitStatement",
                        "src": "184503:37:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "84b76824",
                  "id": 6702,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "cancelWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6667,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "184351:8:0"
                  },
                  "parameters": {
                    "id": 6666,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184339:2:0"
                  },
                  "returnParameters": {
                    "id": 6668,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184360:0:0"
                  },
                  "scope": 7392,
                  "src": "184316:231:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 6737,
                    "nodeType": "Block",
                    "src": "184796:313:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6715,
                                    "name": "lockupPeriod",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5917,
                                    "src": "184839:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 6711,
                                      "name": "depositDate",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5928,
                                      "src": "184814:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                        "typeString": "mapping(address => uint256)"
                                      }
                                    },
                                    "id": 6713,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 6712,
                                      "name": "account",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6705,
                                      "src": "184826:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "184814:20:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 711,
                                  "src": "184814:24:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6716,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184814:38:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6717,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "184856:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 6718,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "184856:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184814:57:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a46554e44535f4c4f434b4544",
                              "id": 6720,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "184877:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_2c0f6d52ffdeb0bd25a230e1a7659ada483ed512b216d6ee194ba6285cb9fd4c",
                                "typeString": "literal_string \"P:FUNDS_LOCKED\""
                              },
                              "value": "P:FUNDS_LOCKED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_2c0f6d52ffdeb0bd25a230e1a7659ada483ed512b216d6ee194ba6285cb9fd4c",
                                "typeString": "literal_string \"P:FUNDS_LOCKED\""
                              }
                            ],
                            "id": 6710,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184806:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184806:88:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6722,
                        "nodeType": "ExpressionStatement",
                        "src": "184806:88:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6728,
                                    "name": "wad",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6707,
                                    "src": "184983:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 6725,
                                        "name": "account",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6705,
                                        "src": "184970:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 6724,
                                      "name": "balanceOf",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1174,
                                      "src": "184960:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                        "typeString": "function (address) view returns (uint256)"
                                      }
                                    },
                                    "id": 6726,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "184960:18:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 6727,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 728,
                                  "src": "184960:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 6729,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "184960:27:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 6730,
                                  "name": "totalCustodyAllowance",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5962,
                                  "src": "184991:21:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 6732,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 6731,
                                  "name": "account",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6705,
                                  "src": "185013:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "184991:30:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "184960:61:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a494e5355465f5452414e535f42414c",
                              "id": 6734,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "185023:19:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_95a4abeb1e7dd488cffb41ab262073281f9caa0b77fe310838a8fec46f9561e3",
                                "typeString": "literal_string \"P:INSUF_TRANS_BAL\""
                              },
                              "value": "P:INSUF_TRANS_BAL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_95a4abeb1e7dd488cffb41ab262073281f9caa0b77fe310838a8fec46f9561e3",
                                "typeString": "literal_string \"P:INSUF_TRANS_BAL\""
                              }
                            ],
                            "id": 6723,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "184952:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "184952:91:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6736,
                        "nodeType": "ExpressionStatement",
                        "src": "184952:91:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6703,
                    "nodeType": "StructuredDocumentation",
                    "src": "184553:172:0",
                    "text": "@dev   Checks that the account can withdraw an amount.\n@param account The address of the account.\n@param wad     The amount to withdraw."
                  },
                  "id": 6738,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_canWithdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 6708,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6705,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6738,
                        "src": "184752:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6704,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "184752:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6707,
                        "mutability": "mutable",
                        "name": "wad",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6738,
                        "src": "184769:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6706,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "184769:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "184751:30:0"
                  },
                  "returnParameters": {
                    "id": 6709,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "184796:0:0"
                  },
                  "scope": 7392,
                  "src": "184730:379:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    3607
                  ],
                  "body": {
                    "id": 6808,
                    "nodeType": "Block",
                    "src": "185164:782:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6744,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "185174:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185174:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6746,
                        "nodeType": "ExpressionStatement",
                        "src": "185174:24:0"
                      },
                      {
                        "assignments": [
                          6748
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6748,
                            "mutability": "mutable",
                            "name": "wad",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6808,
                            "src": "185208:11:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6747,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "185208:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6752,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6750,
                              "name": "amt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6740,
                              "src": "185229:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6749,
                            "name": "_toWad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7244,
                            "src": "185222:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) view returns (uint256)"
                            }
                          },
                          "id": 6751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185222:11:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "185208:25:0"
                      },
                      {
                        "assignments": [
                          6754,
                          6756
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6754,
                            "mutability": "mutable",
                            "name": "lpCooldownPeriod",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6808,
                            "src": "185244:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6753,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "185244:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6756,
                            "mutability": "mutable",
                            "name": "lpWithdrawWindow",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6808,
                            "src": "185270:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6755,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "185270:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6762,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6758,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "185307:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6757,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "185298:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 6759,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "185298:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "id": 6760,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getLpCooldownParams",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2869,
                            "src": "185298:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function () view external returns (uint256,uint256)"
                            }
                          },
                          "id": 6761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185298:44:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "185243:99:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6764,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "185366:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6765,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "185366:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6766,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6748,
                              "src": "185378:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6763,
                            "name": "_canWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6738,
                            "src": "185353:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) view"
                            }
                          },
                          "id": 6767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185353:29:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6768,
                        "nodeType": "ExpressionStatement",
                        "src": "185353:29:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6782,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6779,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 6770,
                                        "name": "block",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -4,
                                        "src": "185401:5:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_block",
                                          "typeString": "block"
                                        }
                                      },
                                      "id": 6771,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "timestamp",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "185401:15:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 6777,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 6772,
                                              "name": "withdrawCooldown",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 5950,
                                              "src": "185420:16:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                              }
                                            },
                                            "id": 6775,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 6773,
                                                "name": "msg",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": -15,
                                                "src": "185437:3:0",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_magic_message",
                                                  "typeString": "msg"
                                                }
                                              },
                                              "id": 6774,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "sender",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": null,
                                              "src": "185437:10:0",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address_payable",
                                                "typeString": "address payable"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "185420:28:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "+",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 6776,
                                            "name": "lpCooldownPeriod",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6754,
                                            "src": "185451:16:0",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "185420:47:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6778,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "185419:49:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "185401:67:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6780,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "185400:69:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 6781,
                                "name": "lpWithdrawWindow",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6756,
                                "src": "185473:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "185400:89:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a57495448445241575f4e4f545f414c4c4f574544",
                              "id": 6783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "185491:24:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_575c98843846db40352058cd50eb14a4a03213eb75efcfea1f1fbcac3ca420ef",
                                "typeString": "literal_string \"P:WITHDRAW_NOT_ALLOWED\""
                              },
                              "value": "P:WITHDRAW_NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_575c98843846db40352058cd50eb14a4a03213eb75efcfea1f1fbcac3ca420ef",
                                "typeString": "literal_string \"P:WITHDRAW_NOT_ALLOWED\""
                              }
                            ],
                            "id": 6769,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "185392:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185392:124:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6785,
                        "nodeType": "ExpressionStatement",
                        "src": "185392:124:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6787,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "185533:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6788,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "185533:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6789,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6748,
                              "src": "185545:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6786,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              2343
                            ],
                            "referencedDeclaration": 2343,
                            "src": "185527:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185527:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6791,
                        "nodeType": "ExpressionStatement",
                        "src": "185527:22:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6792,
                            "name": "withdrawFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              6927
                            ],
                            "referencedDeclaration": 6927,
                            "src": "185604:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6793,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185604:15:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6794,
                        "nodeType": "ExpressionStatement",
                        "src": "185604:15:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6796,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "185862:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6797,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "185862:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 6800,
                                    "name": "_recognizeLosses",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      3175
                                    ],
                                    "referencedDeclaration": 3175,
                                    "src": "185882:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                                      "typeString": "function () returns (uint256)"
                                    }
                                  },
                                  "id": 6801,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "185882:18:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6798,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6740,
                                  "src": "185874:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 6799,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sub",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 728,
                                "src": "185874:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 6802,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "185874:27:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6795,
                            "name": "_transferLiquidityLockerFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7391,
                            "src": "185832:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185832:70:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6804,
                        "nodeType": "ExpressionStatement",
                        "src": "185832:70:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6805,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "185913:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6806,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "185913:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6807,
                        "nodeType": "ExpressionStatement",
                        "src": "185913:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "2e1a7d4d",
                  "id": 6809,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdraw",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6742,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "185155:8:0"
                  },
                  "parameters": {
                    "id": 6741,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6740,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6809,
                        "src": "185133:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6739,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "185133:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "185132:13:0"
                  },
                  "returnParameters": {
                    "id": 6743,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "185164:0:0"
                  },
                  "scope": 7392,
                  "src": "185115:831:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2257
                  ],
                  "body": {
                    "id": 6884,
                    "nodeType": "Block",
                    "src": "186239:664:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6820,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "186249:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186249:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6822,
                        "nodeType": "ExpressionStatement",
                        "src": "186249:24:0"
                      },
                      {
                        "assignments": [
                          6824,
                          6826
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6824,
                            "mutability": "mutable",
                            "name": "lpCooldownPeriod",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6884,
                            "src": "186285:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6823,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "186285:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6826,
                            "mutability": "mutable",
                            "name": "lpWithdrawWindow",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6884,
                            "src": "186311:24:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6825,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "186311:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6832,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6828,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "186348:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6827,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "186339:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 6829,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "186339:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "id": 6830,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getLpCooldownParams",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2869,
                            "src": "186339:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function () view external returns (uint256,uint256)"
                            }
                          },
                          "id": 6831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186339:44:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "186284:99:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6834,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6812,
                              "src": "186407:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6835,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6816,
                              "src": "186413:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6833,
                            "name": "_canWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6738,
                            "src": "186394:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) view"
                            }
                          },
                          "id": 6836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186394:23:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6837,
                        "nodeType": "ExpressionStatement",
                        "src": "186394:23:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6839,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "186435:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 6840,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "timestamp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "186435:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6847,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6845,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 6841,
                                          "name": "withdrawCooldown",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5950,
                                          "src": "186454:16:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 6843,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 6842,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6814,
                                          "src": "186471:2:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "186454:20:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 6844,
                                        "name": "lpCooldownPeriod",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6824,
                                        "src": "186477:16:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "186454:39:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 6846,
                                      "name": "lpWithdrawWindow",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6826,
                                      "src": "186496:16:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "186454:58:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6848,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "186453:60:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "186435:78:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a544f5f4e4f545f414c4c4f574544",
                              "id": 6850,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "186515:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_fe90c0870a5c4af2cce1e73d6c6858f1da9cfa34892ed429e9a0cbf981051164",
                                "typeString": "literal_string \"P:TO_NOT_ALLOWED\""
                              },
                              "value": "P:TO_NOT_ALLOWED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_fe90c0870a5c4af2cce1e73d6c6858f1da9cfa34892ed429e9a0cbf981051164",
                                "typeString": "literal_string \"P:TO_NOT_ALLOWED\""
                              }
                            ],
                            "id": 6838,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "186427:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186427:107:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6852,
                        "nodeType": "ExpressionStatement",
                        "src": "186427:107:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 6855,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6812,
                                    "src": "186622:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6854,
                                  "name": "recognizableLossesOf",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2148,
                                  "src": "186601:20:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                    "typeString": "function (address) view returns (uint256)"
                                  }
                                },
                                "id": 6856,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "186601:26:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 6859,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "186639:1:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6858,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "186631:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 6857,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "186631:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 6860,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "186631:10:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "186601:40:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a5245434f475f4c4f53534553",
                              "id": 6862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "186681:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8de3ef57702748caf51e2fffc5b4f6a3f6bdc62e1293e4a0c3d7ee9736796632",
                                "typeString": "literal_string \"P:RECOG_LOSSES\""
                              },
                              "value": "P:RECOG_LOSSES"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8de3ef57702748caf51e2fffc5b4f6a3f6bdc62e1293e4a0c3d7ee9736796632",
                                "typeString": "literal_string \"P:RECOG_LOSSES\""
                              }
                            ],
                            "id": 6853,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "186593:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 6863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186593:105:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6864,
                        "nodeType": "ExpressionStatement",
                        "src": "186593:105:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6868,
                              "name": "depositDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5928,
                              "src": "186820:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 6870,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6814,
                                  "src": "186843:2:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 6869,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1174,
                                "src": "186833:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 6871,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "186833:13:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6872,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6816,
                              "src": "186848:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6873,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "186853:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6865,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "186794:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6867,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "updateDepositDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5294,
                            "src": "186794:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_mapping$_t_address_$_t_uint256_$_$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (mapping(address => uint256),uint256,uint256,address)"
                            }
                          },
                          "id": 6874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186794:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6875,
                        "nodeType": "ExpressionStatement",
                        "src": "186794:62:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6879,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6812,
                              "src": "186882:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6880,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6814,
                              "src": "186888:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6881,
                              "name": "wad",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6816,
                              "src": "186892:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6876,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "186866:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_Pool_$7392",
                                "typeString": "contract super Pool"
                              }
                            },
                            "id": 6878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2257,
                            "src": "186866:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 6882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186866:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6883,
                        "nodeType": "ExpressionStatement",
                        "src": "186866:30:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6810,
                    "nodeType": "StructuredDocumentation",
                    "src": "185952:206:0",
                    "text": "@dev   Transfers PoolFDTs.\n@param from Th address  sending   PoolFDTs.\n@param to   The address receiving PoolFDTs.\n@param wad  The amount of PoolFDTs to transfer."
                  },
                  "id": 6885,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transfer",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6818,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "186230:8:0"
                  },
                  "parameters": {
                    "id": 6817,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6812,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6885,
                        "src": "186182:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6811,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "186182:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6814,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6885,
                        "src": "186196:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6813,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "186196:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6816,
                        "mutability": "mutable",
                        "name": "wad",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 6885,
                        "src": "186208:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6815,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "186208:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "186181:39:0"
                  },
                  "returnParameters": {
                    "id": 6819,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "186239:0:0"
                  },
                  "scope": 7392,
                  "src": "186163:740:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    120,
                    3612
                  ],
                  "body": {
                    "id": 6926,
                    "nodeType": "Block",
                    "src": "186968:354:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6891,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "186978:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 6892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "186978:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6893,
                        "nodeType": "ExpressionStatement",
                        "src": "186978:24:0"
                      },
                      {
                        "assignments": [
                          6895
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6895,
                            "mutability": "mutable",
                            "name": "withdrawableFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 6926,
                            "src": "187012:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6894,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187012:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6898,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6896,
                            "name": "_prepareWithdraw",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1699,
                            "src": "187040:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_uint256_$",
                              "typeString": "function () returns (uint256)"
                            }
                          },
                          "id": 6897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187040:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187012:46:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 6899,
                            "name": "withdrawableFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6895,
                            "src": "187073:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 6902,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "187102:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6901,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "187094:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 6900,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "187094:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 6903,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "187094:10:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187073:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 6906,
                        "nodeType": "IfStatement",
                        "src": "187069:44:0",
                        "trueBody": {
                          "expression": null,
                          "functionReturnParameters": 6890,
                          "id": 6905,
                          "nodeType": "Return",
                          "src": "187106:7:0"
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6908,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187153:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187153:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6910,
                              "name": "withdrawableFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6895,
                              "src": "187165:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6907,
                            "name": "_transferLiquidityLockerFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7391,
                            "src": "187123:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 6911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187123:60:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6912,
                        "nodeType": "ExpressionStatement",
                        "src": "187123:60:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6913,
                            "name": "_emitBalanceUpdatedEvent",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "187193:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 6914,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187193:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6915,
                        "nodeType": "ExpressionStatement",
                        "src": "187193:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6921,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 6916,
                            "name": "interestSum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3131,
                            "src": "187230:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 6919,
                                "name": "withdrawableFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6895,
                                "src": "187260:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 6917,
                                "name": "interestSum",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3131,
                                "src": "187244:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 6918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 728,
                              "src": "187244:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6920,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "187244:34:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187230:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6922,
                        "nodeType": "ExpressionStatement",
                        "src": "187230:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 6923,
                            "name": "_updateFundsTokenBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3229
                            ],
                            "referencedDeclaration": 3229,
                            "src": "187289:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_int256_$",
                              "typeString": "function () returns (int256)"
                            }
                          },
                          "id": 6924,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187289:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "id": 6925,
                        "nodeType": "ExpressionStatement",
                        "src": "187289:26:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "24600fc3",
                  "id": 6927,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "withdrawFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6889,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "contractScope": null,
                        "id": 6887,
                        "name": "IPool",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3697,
                        "src": "186950:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPool_$3697",
                          "typeString": "contract IPool"
                        }
                      },
                      {
                        "contractScope": null,
                        "id": 6888,
                        "name": "IBasicFDT",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 141,
                        "src": "186957:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IBasicFDT_$141",
                          "typeString": "contract IBasicFDT"
                        }
                      }
                    ],
                    "src": "186941:26:0"
                  },
                  "parameters": {
                    "id": 6886,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "186931:2:0"
                  },
                  "returnParameters": {
                    "id": 6890,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "186968:0:0"
                  },
                  "scope": 7392,
                  "src": "186909:413:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3620
                  ],
                  "body": {
                    "id": 7003,
                    "nodeType": "Block",
                    "src": "187415:636:0",
                    "statements": [
                      {
                        "assignments": [
                          6936
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6936,
                            "mutability": "mutable",
                            "name": "oldAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7003,
                            "src": "187425:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6935,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187425:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6943,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6937,
                              "name": "custodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5957,
                              "src": "187453:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 6940,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6938,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187470:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187470:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "187453:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 6942,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 6941,
                            "name": "custodian",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6929,
                            "src": "187482:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "187453:39:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187425:67:0"
                      },
                      {
                        "assignments": [
                          6945
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6945,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7003,
                            "src": "187502:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6944,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187502:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6950,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6948,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6931,
                              "src": "187547:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6946,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6936,
                              "src": "187530:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6947,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "187530:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187530:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187502:52:0"
                      },
                      {
                        "assignments": [
                          6952
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6952,
                            "mutability": "mutable",
                            "name": "newTotalAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7003,
                            "src": "187564:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6951,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "187564:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 6960,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6958,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6931,
                              "src": "187630:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6953,
                                "name": "totalCustodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5962,
                                "src": "187592:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 6956,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6954,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "187614:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6955,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "187614:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "187592:33:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6957,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 711,
                            "src": "187592:37:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187592:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "187564:73:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6964,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6929,
                              "src": "187687:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6965,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6931,
                              "src": "187698:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6966,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6952,
                              "src": "187706:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 6968,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "187735:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 6969,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "187735:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 6967,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1174,
                                "src": "187725:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view returns (uint256)"
                                }
                              },
                              "id": 6970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "187725:21:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 6961,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "187648:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 6963,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "increaseCustodyAllowanceChecks",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5362,
                            "src": "187648:38:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_pure$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 6971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187648:99:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6972,
                        "nodeType": "ExpressionStatement",
                        "src": "187648:99:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6980,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 6973,
                                "name": "custodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5957,
                                "src": "187758:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 6977,
                              "indexExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 6974,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "187775:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 6975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "187775:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "187758:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6978,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 6976,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6929,
                              "src": "187787:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "187758:39:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6979,
                            "name": "newAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6945,
                            "src": "187800:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187758:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6981,
                        "nodeType": "ExpressionStatement",
                        "src": "187758:54:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 6987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 6982,
                              "name": "totalCustodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5962,
                              "src": "187822:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 6985,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6983,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187844:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6984,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187844:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "187822:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 6986,
                            "name": "newTotalAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6952,
                            "src": "187864:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "187822:59:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 6988,
                        "nodeType": "ExpressionStatement",
                        "src": "187822:59:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6990,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "187920:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6991,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "187920:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6992,
                              "name": "custodian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6929,
                              "src": "187932:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6993,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6936,
                              "src": "187943:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 6994,
                              "name": "newAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6945,
                              "src": "187957:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6989,
                            "name": "CustodyAllowanceChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3292,
                            "src": "187896:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 6995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187896:74:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6996,
                        "nodeType": "EmitStatement",
                        "src": "187891:79:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 6998,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188014:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 6999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188014:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7000,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6952,
                              "src": "188026:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6997,
                            "name": "TotalCustodyAllowanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3352,
                            "src": "187985:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "187985:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7002,
                        "nodeType": "EmitStatement",
                        "src": "187980:64:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "27f91856",
                  "id": 7004,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "increaseCustodyAllowance",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 6933,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "187406:8:0"
                  },
                  "parameters": {
                    "id": 6932,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6929,
                        "mutability": "mutable",
                        "name": "custodian",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7004,
                        "src": "187362:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6928,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "187362:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6931,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7004,
                        "src": "187381:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6930,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "187381:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "187361:35:0"
                  },
                  "returnParameters": {
                    "id": 6934,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "187415:0:0"
                  },
                  "scope": 7392,
                  "src": "187328:723:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3630
                  ],
                  "body": {
                    "id": 7084,
                    "nodeType": "Block",
                    "src": "188146:621:0",
                    "statements": [
                      {
                        "assignments": [
                          7015
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7015,
                            "mutability": "mutable",
                            "name": "oldAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7084,
                            "src": "188156:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7014,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "188156:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7022,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7016,
                              "name": "custodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5957,
                              "src": "188179:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 7018,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7017,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188196:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "188179:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 7021,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7019,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "188202:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 7020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "188202:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "188179:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "188156:57:0"
                      },
                      {
                        "assignments": [
                          7024
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7024,
                            "mutability": "mutable",
                            "name": "newAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7084,
                            "src": "188223:20:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7023,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "188223:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7029,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7027,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188263:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7025,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7015,
                              "src": "188246:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "188246:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188246:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "188223:47:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7033,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188315:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7034,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7008,
                              "src": "188321:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7035,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188325:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7030,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "188281:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7032,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferByCustodianChecks",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5322,
                            "src": "188281:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_pure$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) pure"
                            }
                          },
                          "id": 7036,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188281:51:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7037,
                        "nodeType": "ExpressionStatement",
                        "src": "188281:51:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7038,
                                "name": "custodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5957,
                                "src": "188343:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(address => uint256))"
                                }
                              },
                              "id": 7042,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7039,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7006,
                                "src": "188360:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "188343:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7043,
                            "indexExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7040,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188366:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7041,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188366:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "188343:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7044,
                            "name": "newAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7024,
                            "src": "188380:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "188343:49:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7046,
                        "nodeType": "ExpressionStatement",
                        "src": "188343:49:0"
                      },
                      {
                        "assignments": [
                          7048
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7048,
                            "mutability": "mutable",
                            "name": "newTotalAllowance",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7084,
                            "src": "188402:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7047,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "188402:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7055,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7053,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188471:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 7049,
                                "name": "totalCustodyAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5962,
                                "src": "188439:21:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 7051,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 7050,
                                "name": "from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7006,
                                "src": "188461:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "188439:27:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 728,
                            "src": "188439:31:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188439:39:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "188402:76:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7056,
                              "name": "totalCustodyAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5962,
                              "src": "188488:21:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 7058,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7057,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188510:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "188488:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7059,
                            "name": "newTotalAllowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7048,
                            "src": "188525:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "188488:54:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7061,
                        "nodeType": "ExpressionStatement",
                        "src": "188488:54:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7063,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188573:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188573:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7065,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188585:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7066,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7008,
                              "src": "188591:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7067,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7010,
                              "src": "188595:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7062,
                            "name": "CustodyTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3281,
                            "src": "188557:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 7068,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188557:45:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7069,
                        "nodeType": "EmitStatement",
                        "src": "188552:50:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7071,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7006,
                              "src": "188641:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7072,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188647:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188647:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7074,
                              "name": "oldAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7015,
                              "src": "188659:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7075,
                              "name": "newAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7024,
                              "src": "188673:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7070,
                            "name": "CustodyAllowanceChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3292,
                            "src": "188617:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 7076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188617:69:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7077,
                        "nodeType": "EmitStatement",
                        "src": "188612:74:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7079,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "188730:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "188730:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7081,
                              "name": "newTotalAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7048,
                              "src": "188742:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7078,
                            "name": "TotalCustodyAllowanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3352,
                            "src": "188701:28:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 7082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188701:59:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7083,
                        "nodeType": "EmitStatement",
                        "src": "188696:64:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "2ac04ac8",
                  "id": 7085,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "transferByCustodian",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7012,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "188137:8:0"
                  },
                  "parameters": {
                    "id": 7011,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7006,
                        "mutability": "mutable",
                        "name": "from",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7085,
                        "src": "188086:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7005,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "188086:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7008,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7085,
                        "src": "188100:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7007,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "188100:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7010,
                        "mutability": "mutable",
                        "name": "amount",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7085,
                        "src": "188112:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7009,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "188112:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "188085:42:0"
                  },
                  "returnParameters": {
                    "id": 7013,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "188146:0:0"
                  },
                  "scope": 7392,
                  "src": "188057:710:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3636
                  ],
                  "body": {
                    "id": 7104,
                    "nodeType": "Block",
                    "src": "188928:93:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7094,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7087,
                              "src": "188959:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7097,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "188974:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 7096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "188966:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7095,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "188966:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "188966:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7100,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "189000:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7099,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "188991:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 7101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "188991:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7091,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "188938:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "reclaimERC20",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5414,
                            "src": "188938:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_address_$_t_address_$_t_contract$_IMapleGlobals_$2870_$returns$__$",
                              "typeString": "function (address,address,contract IMapleGlobals)"
                            }
                          },
                          "id": 7102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "188938:76:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7103,
                        "nodeType": "ExpressionStatement",
                        "src": "188938:76:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "8905fd4f",
                  "id": 7105,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "reclaimERC20",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7089,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "188919:8:0"
                  },
                  "parameters": {
                    "id": 7088,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7087,
                        "mutability": "mutable",
                        "name": "token",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7105,
                        "src": "188895:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7086,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "188895:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "188894:15:0"
                  },
                  "returnParameters": {
                    "id": 7090,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "188928:0:0"
                  },
                  "scope": 7392,
                  "src": "188873:148:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3650
                  ],
                  "body": {
                    "id": 7127,
                    "nodeType": "Block",
                    "src": "189298:86:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7121,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7107,
                              "src": "189330:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7122,
                              "name": "_liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7109,
                              "src": "189338:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7123,
                              "name": "_staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7111,
                              "src": "189355:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7124,
                              "name": "_stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7113,
                              "src": "189364:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7119,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "189315:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "BPTVal",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5537,
                            "src": "189315:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address,address,address) view returns (uint256)"
                            }
                          },
                          "id": 7125,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "189315:62:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7118,
                        "id": 7126,
                        "nodeType": "Return",
                        "src": "189308:69:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "681cb10a",
                  "id": 7128,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "BPTVal",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7115,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "189266:8:0"
                  },
                  "parameters": {
                    "id": 7114,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7107,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189148:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7106,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189148:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7109,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189172:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7108,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189172:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7111,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189205:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7110,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189205:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7113,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189230:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7112,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189230:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189138:118:0"
                  },
                  "returnParameters": {
                    "id": 7118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7117,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7128,
                        "src": "189289:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7116,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189289:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189288:9:0"
                  },
                  "scope": 7392,
                  "src": "189123:261:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3658
                  ],
                  "body": {
                    "id": 7155,
                    "nodeType": "Block",
                    "src": "189472:175:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 7153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 7141,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 7136,
                                  "name": "openToPublic",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5920,
                                  "src": "189490:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 7137,
                                    "name": "allowedLiquidityProviders",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5945,
                                    "src": "189506:25:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 7140,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7138,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "189532:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 7139,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "189532:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "189506:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "189490:53:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 7142,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "189489:55:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7149,
                                  "name": "depositAmt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7130,
                                  "src": "189613:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7146,
                                      "name": "principalOut",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5911,
                                      "src": "189595:12:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 7143,
                                        "name": "_balanceOfLiquidityLocker",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7256,
                                        "src": "189563:25:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                          "typeString": "function () view returns (uint256)"
                                        }
                                      },
                                      "id": 7144,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "189563:27:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 7145,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 711,
                                    "src": "189563:31:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 7147,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "189563:45:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7148,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "add",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 711,
                                "src": "189563:49:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "189563:61:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 7151,
                              "name": "liquidityCap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5914,
                              "src": "189628:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "189563:77:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "189489:151:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 7135,
                        "id": 7154,
                        "nodeType": "Return",
                        "src": "189482:158:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "80e7ce85",
                  "id": 7156,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isDepositAllowed",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7132,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "189443:8:0"
                  },
                  "parameters": {
                    "id": 7131,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7130,
                        "mutability": "mutable",
                        "name": "depositAmt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7156,
                        "src": "189416:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7129,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189416:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189415:20:0"
                  },
                  "returnParameters": {
                    "id": 7135,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7134,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7156,
                        "src": "189466:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7133,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "189466:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189465:6:0"
                  },
                  "scope": 7392,
                  "src": "189390:257:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3672
                  ],
                  "body": {
                    "id": 7184,
                    "nodeType": "Block",
                    "src": "189764:147:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7173,
                                  "name": "superFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5900,
                                  "src": "189826:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7172,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7300,
                                "src": "189817:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function (address) view returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 7174,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "189817:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7175,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5894,
                              "src": "189841:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7178,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "189861:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 7177,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "189853:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7176,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "189853:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "189853:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7180,
                              "name": "poolDelegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5888,
                              "src": "189878:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7181,
                              "name": "stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5897,
                              "src": "189892:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7170,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "189781:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitialStakeRequirements",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5808,
                            "src": "189781:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_contract$_IMapleGlobals_$2870_$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                              "typeString": "function (contract IMapleGlobals,address,address,address,address) view returns (uint256,uint256,bool,uint256,uint256)"
                            }
                          },
                          "id": 7182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "189781:123:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256,bool,uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 7169,
                        "id": 7183,
                        "nodeType": "Return",
                        "src": "189774:130:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "13bf9e7e",
                  "id": 7185,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInitialStakeRequirements",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7158,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "189699:8:0"
                  },
                  "parameters": {
                    "id": 7157,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "189689:2:0"
                  },
                  "returnParameters": {
                    "id": 7169,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7160,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189722:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7159,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189722:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7162,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189731:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7161,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189731:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7164,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189740:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7163,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "189740:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7166,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189746:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7165,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189746:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7168,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7185,
                        "src": "189755:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7167,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "189755:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189721:42:0"
                  },
                  "scope": 7392,
                  "src": "189653:258:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3690
                  ],
                  "body": {
                    "id": 7212,
                    "nodeType": "Block",
                    "src": "190163:132:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7205,
                              "name": "_bPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7187,
                              "src": "190210:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7206,
                              "name": "_liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7189,
                              "src": "190218:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7207,
                              "name": "_staker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7191,
                              "src": "190235:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7208,
                              "name": "_stakeLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7193,
                              "src": "190244:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7209,
                              "name": "_liquidityAssetAmountRequired",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7195,
                              "src": "190258:29:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7203,
                              "name": "PoolLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5865,
                              "src": "190180:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_PoolLib_$5865_$",
                                "typeString": "type(library PoolLib)"
                              }
                            },
                            "id": 7204,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getPoolSharesRequired",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5746,
                            "src": "190180:29:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_view$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                              "typeString": "function (address,address,address,address,uint256) view returns (uint256,uint256)"
                            }
                          },
                          "id": 7210,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "190180:108:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 7202,
                        "id": 7211,
                        "nodeType": "Return",
                        "src": "190173:115:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "c3746825",
                  "id": 7213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPoolSharesRequired",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7197,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "190122:8:0"
                  },
                  "parameters": {
                    "id": 7196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7187,
                        "mutability": "mutable",
                        "name": "_bPool",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "189957:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7186,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189957:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7189,
                        "mutability": "mutable",
                        "name": "_liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "189981:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7188,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "189981:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7191,
                        "mutability": "mutable",
                        "name": "_staker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190014:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7190,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "190014:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7193,
                        "mutability": "mutable",
                        "name": "_stakeLocker",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190039:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7192,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "190039:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7195,
                        "mutability": "mutable",
                        "name": "_liquidityAssetAmountRequired",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190069:37:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7194,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190069:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "189947:165:0"
                  },
                  "returnParameters": {
                    "id": 7202,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7199,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190145:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7198,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190145:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7201,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7213,
                        "src": "190154:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7200,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190154:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190144:18:0"
                  },
                  "scope": 7392,
                  "src": "189917:378:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3696
                  ],
                  "body": {
                    "id": 7224,
                    "nodeType": "Block",
                    "src": "190366:52:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          },
                          "id": 7222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 7219,
                            "name": "poolState",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5923,
                            "src": "190383:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 7220,
                              "name": "State",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3237,
                              "src": "190396:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_State_$3237_$",
                                "typeString": "type(enum IPool.State)"
                              }
                            },
                            "id": 7221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Finalized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "190396:15:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_State_$3237",
                              "typeString": "enum IPool.State"
                            }
                          },
                          "src": "190383:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 7218,
                        "id": 7223,
                        "nodeType": "Return",
                        "src": "190376:35:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "4f85221a",
                  "id": 7225,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isPoolFinalized",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7215,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "190337:8:0"
                  },
                  "parameters": {
                    "id": 7214,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "190325:2:0"
                  },
                  "returnParameters": {
                    "id": 7218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7217,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7225,
                        "src": "190360:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7216,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "190360:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190359:6:0"
                  },
                  "scope": 7392,
                  "src": "190301:117:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 7243,
                    "nodeType": "Block",
                    "src": "190679:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "hexValue": "3130",
                                "id": 7238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "190713:2:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                },
                                "value": "10"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "**",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7239,
                                "name": "liquidityAssetDecimals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5902,
                                "src": "190719:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "190713:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7235,
                                  "name": "WAD",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5878,
                                  "src": "190704:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7233,
                                  "name": "amt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7228,
                                  "src": "190696:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 7234,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 791,
                                "src": "190696:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7236,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "190696:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7237,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "div",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 808,
                            "src": "190696:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 7241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "190696:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7232,
                        "id": 7242,
                        "nodeType": "Return",
                        "src": "190689:53:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7226,
                    "nodeType": "StructuredDocumentation",
                    "src": "190518:95:0",
                    "text": "@dev   Converts to WAD precision.\n@param amt The amount to convert."
                  },
                  "id": 7244,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_toWad",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7228,
                        "mutability": "mutable",
                        "name": "amt",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7244,
                        "src": "190634:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7227,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190634:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190633:13:0"
                  },
                  "returnParameters": {
                    "id": 7232,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7231,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7244,
                        "src": "190670:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7230,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190670:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190669:9:0"
                  },
                  "scope": 7392,
                  "src": "190618:131:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7255,
                    "nodeType": "Block",
                    "src": "190956:65:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7252,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "190998:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7250,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "190973:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16,
                            "src": "190973:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 7253,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "190973:41:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7249,
                        "id": 7254,
                        "nodeType": "Return",
                        "src": "190966:48:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7245,
                    "nodeType": "StructuredDocumentation",
                    "src": "190755:127:0",
                    "text": "@dev    Returns the balance of this Pool's LiquidityLocker.\n@return The balance of LiquidityLocker."
                  },
                  "id": 7256,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_balanceOfLiquidityLocker",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7246,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "190921:2:0"
                  },
                  "returnParameters": {
                    "id": 7249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7248,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7256,
                        "src": "190947:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7247,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "190947:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "190946:9:0"
                  },
                  "scope": 7392,
                  "src": "190887:134:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7269,
                    "nodeType": "Block",
                    "src": "191211:60:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_State_$3237",
                                "typeString": "enum IPool.State"
                              },
                              "id": 7265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 7263,
                                "name": "poolState",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5923,
                                "src": "191229:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_State_$3237",
                                  "typeString": "enum IPool.State"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7264,
                                "name": "_state",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7259,
                                "src": "191242:6:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_State_$3237",
                                  "typeString": "enum IPool.State"
                                }
                              },
                              "src": "191229:19:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4241445f5354415445",
                              "id": 7266,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "191250:13:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51cbbabed70c79a80a4b93853cd58aab5ca1d51219719f75e45421c1a1ef8f9a",
                                "typeString": "literal_string \"P:BAD_STATE\""
                              },
                              "value": "P:BAD_STATE"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51cbbabed70c79a80a4b93853cd58aab5ca1d51219719f75e45421c1a1ef8f9a",
                                "typeString": "literal_string \"P:BAD_STATE\""
                              }
                            ],
                            "id": 7262,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "191221:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191221:43:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7268,
                        "nodeType": "ExpressionStatement",
                        "src": "191221:43:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7257,
                    "nodeType": "StructuredDocumentation",
                    "src": "191027:128:0",
                    "text": "@dev   Checks that the current state of Pool matches the provided state.\n@param _state A Pool state."
                  },
                  "id": 7270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidState",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7259,
                        "mutability": "mutable",
                        "name": "_state",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7270,
                        "src": "191183:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_State_$3237",
                          "typeString": "enum IPool.State"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 7258,
                          "name": "State",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 3237,
                          "src": "191183:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$3237",
                            "typeString": "enum IPool.State"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "191182:14:0"
                  },
                  "returnParameters": {
                    "id": 7261,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191211:0:0"
                  },
                  "scope": 7392,
                  "src": "191160:111:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7282,
                    "nodeType": "Block",
                    "src": "191395:65:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 7278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7275,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "191413:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7276,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "191413:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 7277,
                                "name": "poolDelegate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5888,
                                "src": "191427:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "191413:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f44454c",
                              "id": 7279,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "191441:11:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3d98e7eddb8c5bf33a1584eca631dace9470fe7754001f896788b834171c2d89",
                                "typeString": "literal_string \"P:NOT_DEL\""
                              },
                              "value": "P:NOT_DEL"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3d98e7eddb8c5bf33a1584eca631dace9470fe7754001f896788b834171c2d89",
                                "typeString": "literal_string \"P:NOT_DEL\""
                              }
                            ],
                            "id": 7274,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "191405:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7280,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191405:48:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7281,
                        "nodeType": "ExpressionStatement",
                        "src": "191405:48:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7271,
                    "nodeType": "StructuredDocumentation",
                    "src": "191277:71:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate."
                  },
                  "id": 7283,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidDelegate",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7272,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191378:2:0"
                  },
                  "returnParameters": {
                    "id": 7273,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191395:0:0"
                  },
                  "scope": 7392,
                  "src": "191353:107:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7299,
                    "nodeType": "Block",
                    "src": "191607:74:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7293,
                                      "name": "poolFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7286,
                                      "src": "191651:11:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 7292,
                                    "name": "IPoolFactory",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3821,
                                    "src": "191638:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IPoolFactory_$3821_$",
                                      "typeString": "type(contract IPoolFactory)"
                                    }
                                  },
                                  "id": 7294,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "191638:25:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IPoolFactory_$3821",
                                    "typeString": "contract IPoolFactory"
                                  }
                                },
                                "id": 7295,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "globals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3754,
                                "src": "191638:33:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IMapleGlobals_$2870_$",
                                  "typeString": "function () view external returns (contract IMapleGlobals)"
                                }
                              },
                              "id": 7296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "191638:35:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            ],
                            "id": 7291,
                            "name": "IMapleGlobals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2870,
                            "src": "191624:13:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMapleGlobals_$2870_$",
                              "typeString": "type(contract IMapleGlobals)"
                            }
                          },
                          "id": 7297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191624:50:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "functionReturnParameters": 7290,
                        "id": 7298,
                        "nodeType": "Return",
                        "src": "191617:57:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7284,
                    "nodeType": "StructuredDocumentation",
                    "src": "191466:59:0",
                    "text": "@dev Returns the MapleGlobals instance."
                  },
                  "id": 7300,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_globals",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7287,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7286,
                        "mutability": "mutable",
                        "name": "poolFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7300,
                        "src": "191548:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7285,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "191548:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "191547:21:0"
                  },
                  "returnParameters": {
                    "id": 7290,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7289,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7300,
                        "src": "191592:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                          "typeString": "contract IMapleGlobals"
                        },
                        "typeName": {
                          "contractScope": null,
                          "id": 7288,
                          "name": "IMapleGlobals",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 2870,
                          "src": "191592:13:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "191591:15:0"
                  },
                  "scope": 7392,
                  "src": "191530:151:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7314,
                    "nodeType": "Block",
                    "src": "191863:107:0",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7305,
                              "name": "liquidityLocker",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5891,
                              "src": "191893:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7308,
                                  "name": "liquidityAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5885,
                                  "src": "191918:14:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IERC20_$77",
                                    "typeString": "contract IERC20"
                                  }
                                ],
                                "id": 7307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "191910:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 7306,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "191910:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 7309,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "191910:23:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 7310,
                                "name": "_balanceOfLiquidityLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7256,
                                "src": "191935:25:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 7311,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "191935:27:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7304,
                            "name": "BalanceUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3270,
                            "src": "191878:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 7312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "191878:85:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7313,
                        "nodeType": "EmitStatement",
                        "src": "191873:90:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7301,
                    "nodeType": "StructuredDocumentation",
                    "src": "191687:126:0",
                    "text": "@dev Emits a `BalanceUpdated` event for LiquidityLocker. \n@dev It emits a `BalanceUpdated` event. "
                  },
                  "id": 7315,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_emitBalanceUpdatedEvent",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7302,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191851:2:0"
                  },
                  "returnParameters": {
                    "id": 7303,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "191863:0:0"
                  },
                  "scope": 7392,
                  "src": "191818:152:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7330,
                    "nodeType": "Block",
                    "src": "192294:55:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7326,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7318,
                              "src": "192332:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7327,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7320,
                              "src": "192336:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7323,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5885,
                              "src": "192304:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$77",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 7325,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4601,
                            "src": "192304:27:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$77_$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 7328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "192304:38:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7329,
                        "nodeType": "ExpressionStatement",
                        "src": "192304:38:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7316,
                    "nodeType": "StructuredDocumentation",
                    "src": "191976:244:0",
                    "text": "@dev   Transfers Liquidity Asset to given `to` address, from self (i.e. `address(this)`).\n@param to    The address to transfer liquidityAsset.\n@param value The amount of liquidity asset that gets transferred."
                  },
                  "id": 7331,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferLiquidityAsset",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7318,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7331,
                        "src": "192258:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7317,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "192258:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7320,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7331,
                        "src": "192270:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7319,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "192270:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "192257:27:0"
                  },
                  "returnParameters": {
                    "id": 7322,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192294:0:0"
                  },
                  "scope": 7392,
                  "src": "192225:124:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7348,
                    "nodeType": "Block",
                    "src": "192500:100:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 7344,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 7339,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7336,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "192518:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7337,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "192518:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 7338,
                                  "name": "poolDelegate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5888,
                                  "src": "192532:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "192518:26:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7340,
                                  "name": "poolAdmins",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5940,
                                  "src": "192548:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                    "typeString": "mapping(address => bool)"
                                  }
                                },
                                "id": 7343,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7341,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "192559:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7342,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "192559:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "192548:22:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "192518:52:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a4e4f545f44454c5f4f525f41444d494e",
                              "id": 7345,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "192572:20:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_d5ae77588d74821fccda162c37b54aa9242317fd4a54a64f95d51f0dde9feabe",
                                "typeString": "literal_string \"P:NOT_DEL_OR_ADMIN\""
                              },
                              "value": "P:NOT_DEL_OR_ADMIN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_d5ae77588d74821fccda162c37b54aa9242317fd4a54a64f95d51f0dde9feabe",
                                "typeString": "literal_string \"P:NOT_DEL_OR_ADMIN\""
                              }
                            ],
                            "id": 7335,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "192510:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "192510:83:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7347,
                        "nodeType": "ExpressionStatement",
                        "src": "192510:83:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7332,
                    "nodeType": "StructuredDocumentation",
                    "src": "192355:87:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate or a Pool Admin."
                  },
                  "id": 7349,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidDelegateOrPoolAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7333,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192483:2:0"
                  },
                  "returnParameters": {
                    "id": 7334,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192500:0:0"
                  },
                  "scope": 7392,
                  "src": "192447:153:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7363,
                    "nodeType": "Block",
                    "src": "192734:84:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7359,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "192752:40:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 7355,
                                        "name": "superFactory",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5900,
                                        "src": "192762:12:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 7354,
                                      "name": "_globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7300,
                                      "src": "192753:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_contract$_IMapleGlobals_$2870_$",
                                        "typeString": "function (address) view returns (contract IMapleGlobals)"
                                      }
                                    },
                                    "id": 7356,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "192753:22:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 7357,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "protocolPaused",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2569,
                                  "src": "192753:37:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                    "typeString": "function () view external returns (bool)"
                                  }
                                },
                                "id": 7358,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "192753:39:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "503a50524f544f5f504155534544",
                              "id": 7360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "192794:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e82cfe487ceb95d02498cab97f189f4a04df24267b7d64872770659e68f5c819",
                                "typeString": "literal_string \"P:PROTO_PAUSED\""
                              },
                              "value": "P:PROTO_PAUSED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_e82cfe487ceb95d02498cab97f189f4a04df24267b7d64872770659e68f5c819",
                                "typeString": "literal_string \"P:PROTO_PAUSED\""
                              }
                            ],
                            "id": 7353,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "192744:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "192744:67:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7362,
                        "nodeType": "ExpressionStatement",
                        "src": "192744:67:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7350,
                    "nodeType": "StructuredDocumentation",
                    "src": "192606:75:0",
                    "text": "@dev Checks that the protocol is not in a paused state."
                  },
                  "id": 7364,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_whenProtocolNotPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7351,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192717:2:0"
                  },
                  "returnParameters": {
                    "id": 7352,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192734:0:0"
                  },
                  "scope": 7392,
                  "src": "192686:132:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7374,
                    "nodeType": "Block",
                    "src": "193009:69:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7368,
                            "name": "_isValidDelegate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7283,
                            "src": "193019:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "193019:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7370,
                        "nodeType": "ExpressionStatement",
                        "src": "193019:18:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7371,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7364,
                            "src": "193047:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "193047:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7373,
                        "nodeType": "ExpressionStatement",
                        "src": "193047:24:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7365,
                    "nodeType": "StructuredDocumentation",
                    "src": "192824:118:0",
                    "text": "@dev Checks that `msg.sender` is the Pool Delegate and that the protocol is not in a paused state."
                  },
                  "id": 7375,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidDelegateAndProtocolNotPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7366,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "192992:2:0"
                  },
                  "returnParameters": {
                    "id": 7367,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "193009:0:0"
                  },
                  "scope": 7392,
                  "src": "192947:131:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7390,
                    "nodeType": "Block",
                    "src": "193159:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7386,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7377,
                              "src": "193212:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7387,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7379,
                              "src": "193216:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7383,
                                  "name": "liquidityLocker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5891,
                                  "src": "193186:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 7382,
                                "name": "ILiquidityLocker",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2902,
                                "src": "193169:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ILiquidityLocker_$2902_$",
                                  "typeString": "type(contract ILiquidityLocker)"
                                }
                              },
                              "id": 7384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "193169:33:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ILiquidityLocker_$2902",
                                "typeString": "contract ILiquidityLocker"
                              }
                            },
                            "id": 7385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2891,
                            "src": "193169:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 7388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "193169:53:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7389,
                        "nodeType": "ExpressionStatement",
                        "src": "193169:53:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 7391,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferLiquidityLockerFunds",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7380,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7377,
                        "mutability": "mutable",
                        "name": "to",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7391,
                        "src": "193123:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7376,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "193123:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7379,
                        "mutability": "mutable",
                        "name": "value",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7391,
                        "src": "193135:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7378,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "193135:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "193122:27:0"
                  },
                  "returnParameters": {
                    "id": 7381,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "193159:0:0"
                  },
                  "scope": 7392,
                  "src": "193084:145:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "172000:21232:0"
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 7394,
                    "name": "Context",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1076,
                    "src": "193842:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Context_$1076",
                      "typeString": "contract Context"
                    }
                  },
                  "id": 7395,
                  "nodeType": "InheritanceSpecifier",
                  "src": "193842:7:0"
                }
              ],
              "contractDependencies": [
                1076
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 7393,
                "nodeType": "StructuredDocumentation",
                "src": "193372:439:0",
                "text": " @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place."
              },
              "fullyImplemented": true,
              "id": 7479,
              "linearizedBaseContracts": [
                7479,
                1076
              ],
              "name": "Pausable",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 7396,
                    "nodeType": "StructuredDocumentation",
                    "src": "193856:73:0",
                    "text": " @dev Emitted when the pause is triggered by `account`."
                  },
                  "id": 7400,
                  "name": "Paused",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 7399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7398,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7400,
                        "src": "193947:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7397,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "193947:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "193946:17:0"
                  },
                  "src": "193934:30:0"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 7401,
                    "nodeType": "StructuredDocumentation",
                    "src": "193970:70:0",
                    "text": " @dev Emitted when the pause is lifted by `account`."
                  },
                  "id": 7405,
                  "name": "Unpaused",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 7404,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7403,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7405,
                        "src": "194060:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7402,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "194060:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "194059:17:0"
                  },
                  "src": "194045:32:0"
                },
                {
                  "constant": false,
                  "id": 7407,
                  "mutability": "mutable",
                  "name": "_paused",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7479,
                  "src": "194083:20:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 7406,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "194083:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 7415,
                    "nodeType": "Block",
                    "src": "194206:32:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7411,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7407,
                            "src": "194216:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 7412,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "194226:5:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "194216:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7414,
                        "nodeType": "ExpressionStatement",
                        "src": "194216:15:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7408,
                    "nodeType": "StructuredDocumentation",
                    "src": "194110:67:0",
                    "text": " @dev Initializes the contract in unpaused state."
                  },
                  "id": 7416,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7409,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "194194:2:0"
                  },
                  "returnParameters": {
                    "id": 7410,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "194206:0:0"
                  },
                  "scope": 7479,
                  "src": "194182:56:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7424,
                    "nodeType": "Block",
                    "src": "194378:31:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7422,
                          "name": "_paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7407,
                          "src": "194395:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 7421,
                        "id": 7423,
                        "nodeType": "Return",
                        "src": "194388:14:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7417,
                    "nodeType": "StructuredDocumentation",
                    "src": "194244:84:0",
                    "text": " @dev Returns true if the contract is paused, and false otherwise."
                  },
                  "functionSelector": "5c975abb",
                  "id": 7425,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7418,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "194348:2:0"
                  },
                  "returnParameters": {
                    "id": 7421,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7420,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7425,
                        "src": "194372:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7419,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "194372:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "194371:6:0"
                  },
                  "scope": 7479,
                  "src": "194333:76:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 7435,
                    "nodeType": "Block",
                    "src": "194620:65:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7430,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "194638:8:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 7429,
                                "name": "_paused",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7407,
                                "src": "194639:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5061757361626c653a20706175736564",
                              "id": 7431,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "194648:18:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a",
                                "typeString": "literal_string \"Pausable: paused\""
                              },
                              "value": "Pausable: paused"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a",
                                "typeString": "literal_string \"Pausable: paused\""
                              }
                            ],
                            "id": 7428,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "194630:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "194630:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7433,
                        "nodeType": "ExpressionStatement",
                        "src": "194630:37:0"
                      },
                      {
                        "id": 7434,
                        "nodeType": "PlaceholderStatement",
                        "src": "194677:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7426,
                    "nodeType": "StructuredDocumentation",
                    "src": "194415:175:0",
                    "text": " @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused."
                  },
                  "id": 7436,
                  "name": "whenNotPaused",
                  "nodeType": "ModifierDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7427,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "194617:2:0"
                  },
                  "src": "194595:90:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7445,
                    "nodeType": "Block",
                    "src": "194885:68:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7440,
                              "name": "_paused",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7407,
                              "src": "194903:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "5061757361626c653a206e6f7420706175736564",
                              "id": 7441,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "194912:22:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a",
                                "typeString": "literal_string \"Pausable: not paused\""
                              },
                              "value": "Pausable: not paused"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a",
                                "typeString": "literal_string \"Pausable: not paused\""
                              }
                            ],
                            "id": 7439,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "194895:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "194895:40:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7443,
                        "nodeType": "ExpressionStatement",
                        "src": "194895:40:0"
                      },
                      {
                        "id": 7444,
                        "nodeType": "PlaceholderStatement",
                        "src": "194945:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7437,
                    "nodeType": "StructuredDocumentation",
                    "src": "194691:167:0",
                    "text": " @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused."
                  },
                  "id": 7446,
                  "name": "whenPaused",
                  "nodeType": "ModifierDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7438,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "194882:2:0"
                  },
                  "src": "194863:90:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7461,
                    "nodeType": "Block",
                    "src": "195137:66:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7452,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7407,
                            "src": "195147:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 7453,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "195157:4:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "195147:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7455,
                        "nodeType": "ExpressionStatement",
                        "src": "195147:14:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 7457,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "195183:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 7458,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "195183:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 7456,
                            "name": "Paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7400,
                            "src": "195176:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7459,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "195176:20:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7460,
                        "nodeType": "EmitStatement",
                        "src": "195171:25:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7447,
                    "nodeType": "StructuredDocumentation",
                    "src": "194959:124:0",
                    "text": " @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."
                  },
                  "id": 7462,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 7450,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 7449,
                        "name": "whenNotPaused",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7436,
                        "src": "195123:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "195123:13:0"
                    }
                  ],
                  "name": "_pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7448,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "195103:2:0"
                  },
                  "returnParameters": {
                    "id": 7451,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "195137:0:0"
                  },
                  "scope": 7479,
                  "src": "195088:115:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7477,
                    "nodeType": "Block",
                    "src": "195383:69:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7470,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7468,
                            "name": "_paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7407,
                            "src": "195393:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 7469,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "195403:5:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "195393:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7471,
                        "nodeType": "ExpressionStatement",
                        "src": "195393:15:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 7473,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1064,
                                "src": "195432:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 7474,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "195432:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 7472,
                            "name": "Unpaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7405,
                            "src": "195423:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 7475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "195423:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7476,
                        "nodeType": "EmitStatement",
                        "src": "195418:27:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7463,
                    "nodeType": "StructuredDocumentation",
                    "src": "195209:121:0",
                    "text": " @dev Returns to normal state.\n Requirements:\n - The contract must be paused."
                  },
                  "id": 7478,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 7466,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 7465,
                        "name": "whenPaused",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7446,
                        "src": "195372:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "195372:10:0"
                    }
                  ],
                  "name": "_unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7464,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "195352:2:0"
                  },
                  "returnParameters": {
                    "id": 7467,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "195383:0:0"
                  },
                  "scope": 7479,
                  "src": "195335:117:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "193812:1642:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 7481,
                    "name": "IPoolFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3821,
                    "src": "195900:12:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolFactory_$3821",
                      "typeString": "contract IPoolFactory"
                    }
                  },
                  "id": 7482,
                  "nodeType": "InheritanceSpecifier",
                  "src": "195900:12:0"
                },
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 7483,
                    "name": "Pausable",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7479,
                    "src": "195914:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Pausable_$7479",
                      "typeString": "contract Pausable"
                    }
                  },
                  "id": 7484,
                  "nodeType": "InheritanceSpecifier",
                  "src": "195914:8:0"
                }
              ],
              "contractDependencies": [
                1076,
                3821,
                7392,
                7479
              ],
              "contractKind": "contract",
              "documentation": {
                "id": 7480,
                "nodeType": "StructuredDocumentation",
                "src": "195833:43:0",
                "text": "@title PoolFactory instantiates Pools."
              },
              "fullyImplemented": true,
              "id": 7771,
              "linearizedBaseContracts": [
                7771,
                7479,
                1076,
                3821
              ],
              "name": "PoolFactory",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "baseFunctions": [
                    3736
                  ],
                  "constant": true,
                  "functionSelector": "c5ba73ed",
                  "id": 7488,
                  "mutability": "constant",
                  "name": "LL_FACTORY",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7486,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "195943:8:0"
                  },
                  "scope": 7771,
                  "src": "195930:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 7485,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "195930:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 7487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "195974:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3742
                  ],
                  "constant": true,
                  "functionSelector": "9f71f14a",
                  "id": 7492,
                  "mutability": "constant",
                  "name": "SL_FACTORY",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7490,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "195994:8:0"
                  },
                  "scope": 7771,
                  "src": "195981:45:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 7489,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "195981:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "argumentTypes": null,
                    "hexValue": "34",
                    "id": 7491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "196025:1:0",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4_by_1",
                      "typeString": "int_const 4"
                    },
                    "value": "4"
                  },
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3748
                  ],
                  "constant": false,
                  "functionSelector": "945164e7",
                  "id": 7495,
                  "mutability": "mutable",
                  "name": "poolsCreated",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7494,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "196048:8:0"
                  },
                  "scope": 7771,
                  "src": "196033:36:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7493,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "196033:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3754
                  ],
                  "constant": false,
                  "functionSelector": "c3124525",
                  "id": 7498,
                  "mutability": "mutable",
                  "name": "globals",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7497,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "196096:8:0"
                  },
                  "scope": 7771,
                  "src": "196075:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                    "typeString": "contract IMapleGlobals"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7496,
                    "name": "IMapleGlobals",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2870,
                    "src": "196075:13:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                      "typeString": "contract IMapleGlobals"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3762
                  ],
                  "constant": false,
                  "functionSelector": "ac4afa38",
                  "id": 7503,
                  "mutability": "mutable",
                  "name": "pools",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7502,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "196154:8:0"
                  },
                  "scope": 7771,
                  "src": "196119:49:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                    "typeString": "mapping(uint256 => address)"
                  },
                  "typeName": {
                    "id": 7501,
                    "keyType": {
                      "id": 7499,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "196127:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "196119:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                      "typeString": "mapping(uint256 => address)"
                    },
                    "valueType": {
                      "id": 7500,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "196138:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3770
                  ],
                  "constant": false,
                  "functionSelector": "5b16ebb7",
                  "id": 7508,
                  "mutability": "mutable",
                  "name": "isPool",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7507,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "196209:8:0"
                  },
                  "scope": 7771,
                  "src": "196174:50:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 7506,
                    "keyType": {
                      "id": 7504,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "196182:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "196174:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 7505,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "196193:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3778
                  ],
                  "constant": false,
                  "functionSelector": "6050abb2",
                  "id": 7513,
                  "mutability": "mutable",
                  "name": "poolFactoryAdmins",
                  "nodeType": "VariableDeclaration",
                  "overrides": {
                    "id": 7512,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "196334:8:0"
                  },
                  "scope": 7771,
                  "src": "196299:61:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "typeName": {
                    "id": 7511,
                    "keyType": {
                      "id": 7509,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "196307:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "196299:24:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                      "typeString": "mapping(address => bool)"
                    },
                    "valueType": {
                      "id": 7510,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "196318:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 7524,
                    "nodeType": "Block",
                    "src": "196404:50:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7522,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7518,
                            "name": "globals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7498,
                            "src": "196414:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                              "typeString": "contract IMapleGlobals"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7520,
                                "name": "_globals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7515,
                                "src": "196438:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7519,
                              "name": "IMapleGlobals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2870,
                              "src": "196424:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IMapleGlobals_$2870_$",
                                "typeString": "type(contract IMapleGlobals)"
                              }
                            },
                            "id": 7521,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "196424:23:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                              "typeString": "contract IMapleGlobals"
                            }
                          },
                          "src": "196414:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "id": 7523,
                        "nodeType": "ExpressionStatement",
                        "src": "196414:33:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 7525,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7516,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7515,
                        "mutability": "mutable",
                        "name": "_globals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7525,
                        "src": "196379:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7514,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "196379:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "196378:18:0"
                  },
                  "returnParameters": {
                    "id": 7517,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "196404:0:0"
                  },
                  "scope": 7771,
                  "src": "196367:87:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3784
                  ],
                  "body": {
                    "id": 7540,
                    "nodeType": "Block",
                    "src": "196518:80:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7531,
                            "name": "_isValidGovernor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7737,
                            "src": "196528:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7532,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "196528:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7533,
                        "nodeType": "ExpressionStatement",
                        "src": "196528:18:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7534,
                            "name": "globals",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7498,
                            "src": "196556:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                              "typeString": "contract IMapleGlobals"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7536,
                                "name": "newGlobals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7527,
                                "src": "196580:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 7535,
                              "name": "IMapleGlobals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2870,
                              "src": "196566:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IMapleGlobals_$2870_$",
                                "typeString": "type(contract IMapleGlobals)"
                              }
                            },
                            "id": 7537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "196566:25:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                              "typeString": "contract IMapleGlobals"
                            }
                          },
                          "src": "196556:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                            "typeString": "contract IMapleGlobals"
                          }
                        },
                        "id": 7539,
                        "nodeType": "ExpressionStatement",
                        "src": "196556:35:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "cc2e0a26",
                  "id": 7541,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setGlobals",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7529,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "196509:8:0"
                  },
                  "parameters": {
                    "id": 7528,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7527,
                        "mutability": "mutable",
                        "name": "newGlobals",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7541,
                        "src": "196480:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7526,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "196480:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "196479:20:0"
                  },
                  "returnParameters": {
                    "id": 7530,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "196518:0:0"
                  },
                  "scope": 7771,
                  "src": "196460:138:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3804
                  ],
                  "body": {
                    "id": 7672,
                    "nodeType": "Block",
                    "src": "196893:1316:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7563,
                            "name": "_whenProtocolNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7770,
                            "src": "196903:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7564,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "196903:24:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7565,
                        "nodeType": "ExpressionStatement",
                        "src": "196903:24:0"
                      },
                      {
                        "id": 7605,
                        "nodeType": "Block",
                        "src": "196937:373:0",
                        "statements": [
                          {
                            "assignments": [
                              7567
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7567,
                                "mutability": "mutable",
                                "name": "_globals",
                                "nodeType": "VariableDeclaration",
                                "overrides": null,
                                "scope": 7605,
                                "src": "196951:22:0",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                  "typeString": "contract IMapleGlobals"
                                },
                                "typeName": {
                                  "contractScope": null,
                                  "id": 7566,
                                  "name": "IMapleGlobals",
                                  "nodeType": "UserDefinedTypeName",
                                  "referencedDeclaration": 2870,
                                  "src": "196951:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                    "typeString": "contract IMapleGlobals"
                                  }
                                },
                                "value": null,
                                "visibility": "internal"
                              }
                            ],
                            "id": 7569,
                            "initialValue": {
                              "argumentTypes": null,
                              "id": 7568,
                              "name": "globals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7498,
                              "src": "196976:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                "typeString": "contract IMapleGlobals"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "196951:32:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 7575,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "197040:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_PoolFactory_$7771",
                                            "typeString": "contract PoolFactory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_PoolFactory_$7771",
                                            "typeString": "contract PoolFactory"
                                          }
                                        ],
                                        "id": 7574,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "197032:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 7573,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "197032:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 7576,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "197032:13:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 7577,
                                      "name": "llFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7549,
                                      "src": "197047:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 7578,
                                      "name": "LL_FACTORY",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7488,
                                      "src": "197058:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7571,
                                      "name": "_globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7567,
                                      "src": "197005:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                        "typeString": "contract IMapleGlobals"
                                      }
                                    },
                                    "id": 7572,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "isValidSubFactory",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2851,
                                    "src": "197005:26:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint8_$returns$_t_bool_$",
                                      "typeString": "function (address,address,uint8) view external returns (bool)"
                                    }
                                  },
                                  "id": 7579,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "197005:64:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "50463a494e56414c49445f4c4c46",
                                  "id": 7580,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "197071:16:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_168b506c42f45811c5d5b928848d2d2ad07bb302f605afa1c62a0540673ea7a7",
                                    "typeString": "literal_string \"PF:INVALID_LLF\""
                                  },
                                  "value": "PF:INVALID_LLF"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_168b506c42f45811c5d5b928848d2d2ad07bb302f605afa1c62a0540673ea7a7",
                                    "typeString": "literal_string \"PF:INVALID_LLF\""
                                  }
                                ],
                                "id": 7570,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "196997:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "196997:91:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7582,
                            "nodeType": "ExpressionStatement",
                            "src": "196997:91:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 7588,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "197145:4:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_PoolFactory_$7771",
                                            "typeString": "contract PoolFactory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_PoolFactory_$7771",
                                            "typeString": "contract PoolFactory"
                                          }
                                        ],
                                        "id": 7587,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "197137:7:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 7586,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "197137:7:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": null,
                                            "typeString": null
                                          }
                                        }
                                      },
                                      "id": 7589,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "197137:13:0",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 7590,
                                      "name": "slFactory",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7547,
                                      "src": "197152:9:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 7591,
                                      "name": "SL_FACTORY",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7492,
                                      "src": "197163:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7584,
                                      "name": "_globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7567,
                                      "src": "197110:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                        "typeString": "contract IMapleGlobals"
                                      }
                                    },
                                    "id": 7585,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "isValidSubFactory",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2851,
                                    "src": "197110:26:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint8_$returns$_t_bool_$",
                                      "typeString": "function (address,address,uint8) view external returns (bool)"
                                    }
                                  },
                                  "id": 7592,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "197110:64:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "50463a494e56414c49445f534c46",
                                  "id": 7593,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "197176:16:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_41d64cac431eb389d7f4e9668f2d04154e444171b5eceb804fb7c7a7cb237ee9",
                                    "typeString": "literal_string \"PF:INVALID_SLF\""
                                  },
                                  "value": "PF:INVALID_SLF"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_41d64cac431eb389d7f4e9668f2d04154e444171b5eceb804fb7c7a7cb237ee9",
                                    "typeString": "literal_string \"PF:INVALID_SLF\""
                                  }
                                ],
                                "id": 7583,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "197102:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7594,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "197102:91:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7595,
                            "nodeType": "ExpressionStatement",
                            "src": "197102:91:0"
                          },
                          {
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 7599,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "197244:3:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 7600,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "197244:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7597,
                                      "name": "_globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7567,
                                      "src": "197215:8:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                        "typeString": "contract IMapleGlobals"
                                      }
                                    },
                                    "id": 7598,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "isValidPoolDelegate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2601,
                                    "src": "197215:28:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                      "typeString": "function (address) view external returns (bool)"
                                    }
                                  },
                                  "id": 7601,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "197215:40:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "hexValue": "50463a4e4f545f44454c4547415445",
                                  "id": 7602,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "197281:17:0",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_874cd1790f5365d38c47e6f2a63ddfd81ad1660a49ba0d2db3b2387a63624efe",
                                    "typeString": "literal_string \"PF:NOT_DELEGATE\""
                                  },
                                  "value": "PF:NOT_DELEGATE"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_874cd1790f5365d38c47e6f2a63ddfd81ad1660a49ba0d2db3b2387a63624efe",
                                    "typeString": "literal_string \"PF:NOT_DELEGATE\""
                                  }
                                ],
                                "id": 7596,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "197207:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                  "typeString": "function (bool,string memory) pure"
                                }
                              },
                              "id": 7603,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "197207:92:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 7604,
                            "nodeType": "ExpressionStatement",
                            "src": "197207:92:0"
                          }
                        ]
                      },
                      {
                        "assignments": [
                          7607
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7607,
                            "mutability": "mutable",
                            "name": "name",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7672,
                            "src": "197320:18:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 7606,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "197320:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7609,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "4d61706c6520506f6f6c20546f6b656e",
                          "id": 7608,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "197343:18:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_e58e9a539ee1c1bc23a63eefc42dde8e50c1f191c295c54c906e0033dc664ca8",
                            "typeString": "literal_string \"Maple Pool Token\""
                          },
                          "value": "Maple Pool Token"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "197320:41:0"
                      },
                      {
                        "assignments": [
                          7611
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7611,
                            "mutability": "mutable",
                            "name": "symbol",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7672,
                            "src": "197371:20:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 7610,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "197371:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7613,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "4d504c2d4c50",
                          "id": 7612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "197394:8:0",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_50943f6c2fe0d8a5a445419e85a88dc530e020fa3f21c3d75369c2a1384b2d3d",
                            "typeString": "literal_string \"MPL-LP\""
                          },
                          "value": "MPL-LP"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "197371:31:0"
                      },
                      {
                        "assignments": [
                          7615
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7615,
                            "mutability": "mutable",
                            "name": "pool",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 7672,
                            "src": "197413:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Pool_$7392",
                              "typeString": "contract Pool"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 7614,
                              "name": "Pool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 7392,
                              "src": "197413:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Pool_$7392",
                                "typeString": "contract Pool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 7630,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7618,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "197463:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7619,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "197463:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7620,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7543,
                              "src": "197491:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7621,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7545,
                              "src": "197523:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7622,
                              "name": "slFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7547,
                              "src": "197551:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7623,
                              "name": "llFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7549,
                              "src": "197578:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7624,
                              "name": "stakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7551,
                              "src": "197605:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7625,
                              "name": "delegateFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7553,
                              "src": "197633:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7626,
                              "name": "liquidityCap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7555,
                              "src": "197662:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7627,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7607,
                              "src": "197692:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7628,
                              "name": "symbol",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7611,
                              "src": "197714:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 7617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "197437:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_contract$_Pool_$7392_$",
                              "typeString": "function (address,address,address,address,address,uint256,uint256,uint256,string memory,string memory) returns (contract Pool)"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 7616,
                              "name": "Pool",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 7392,
                              "src": "197441:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Pool_$7392",
                                "typeString": "contract Pool"
                              }
                            }
                          },
                          "id": 7629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "197437:297:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Pool_$7392",
                            "typeString": "contract Pool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "197413:321:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7636,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 7631,
                            "name": "poolAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7561,
                            "src": "197745:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 7634,
                                "name": "pool",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7615,
                                "src": "197775:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Pool_$7392",
                                  "typeString": "contract Pool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Pool_$7392",
                                  "typeString": "contract Pool"
                                }
                              ],
                              "id": 7633,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "197767:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 7632,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "197767:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 7635,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "197767:13:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "197745:35:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7637,
                        "nodeType": "ExpressionStatement",
                        "src": "197745:35:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7638,
                              "name": "pools",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7503,
                              "src": "197790:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                                "typeString": "mapping(uint256 => address)"
                              }
                            },
                            "id": 7640,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7639,
                              "name": "poolsCreated",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7495,
                              "src": "197796:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "197790:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7641,
                            "name": "poolAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7561,
                            "src": "197812:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "197790:33:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 7643,
                        "nodeType": "ExpressionStatement",
                        "src": "197790:33:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7644,
                              "name": "isPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7508,
                              "src": "197833:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 7646,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7645,
                              "name": "poolAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7561,
                              "src": "197840:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "197833:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 7647,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "197855:4:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "197833:26:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7649,
                        "nodeType": "ExpressionStatement",
                        "src": "197833:26:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": true,
                          "src": "197869:14:0",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 7650,
                            "name": "poolsCreated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7495,
                            "src": "197871:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7652,
                        "nodeType": "ExpressionStatement",
                        "src": "197869:14:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7654,
                              "name": "poolAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7561,
                              "src": "197924:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7655,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "197949:3:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 7656,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "197949:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7657,
                              "name": "liquidityAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7543,
                              "src": "197973:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7658,
                              "name": "stakeAsset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7545,
                              "src": "198001:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7659,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7615,
                                  "src": "198025:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Pool_$7392",
                                    "typeString": "contract Pool"
                                  }
                                },
                                "id": 7660,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "liquidityLocker",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5891,
                                "src": "198025:20:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 7661,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "198025:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7662,
                                  "name": "pool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7615,
                                  "src": "198061:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Pool_$7392",
                                    "typeString": "contract Pool"
                                  }
                                },
                                "id": 7663,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "stakeLocker",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5897,
                                "src": "198061:16:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 7664,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "198061:18:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7665,
                              "name": "stakingFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7551,
                              "src": "198093:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7666,
                              "name": "delegateFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7553,
                              "src": "198117:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7667,
                              "name": "liquidityCap",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7555,
                              "src": "198142:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7668,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7607,
                              "src": "198168:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7669,
                              "name": "symbol",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7611,
                              "src": "198186:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 7653,
                            "name": "PoolCreated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3730,
                            "src": "197899:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,address,address,address,uint256,uint256,uint256,string memory,string memory)"
                            }
                          },
                          "id": 7670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "197899:303:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7671,
                        "nodeType": "EmitStatement",
                        "src": "197894:308:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "312b8982",
                  "id": 7673,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 7559,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 7558,
                        "name": "whenNotPaused",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7436,
                        "src": "196849:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "196849:13:0"
                    }
                  ],
                  "name": "createPool",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7557,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "196840:8:0"
                  },
                  "parameters": {
                    "id": 7556,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7543,
                        "mutability": "mutable",
                        "name": "liquidityAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196633:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7542,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "196633:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7545,
                        "mutability": "mutable",
                        "name": "stakeAsset",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196665:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7544,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "196665:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7547,
                        "mutability": "mutable",
                        "name": "slFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196693:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7546,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "196693:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7549,
                        "mutability": "mutable",
                        "name": "llFactory",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196720:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7548,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "196720:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7551,
                        "mutability": "mutable",
                        "name": "stakingFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196747:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7550,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "196747:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7553,
                        "mutability": "mutable",
                        "name": "delegateFee",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196775:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7552,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "196775:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7555,
                        "mutability": "mutable",
                        "name": "liquidityCap",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196804:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7554,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "196804:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "196623:207:0"
                  },
                  "returnParameters": {
                    "id": 7562,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7561,
                        "mutability": "mutable",
                        "name": "poolAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7673,
                        "src": "196872:19:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7560,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "196872:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "196871:21:0"
                  },
                  "scope": 7771,
                  "src": "196604:1605:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3812
                  ],
                  "body": {
                    "id": 7695,
                    "nodeType": "Block",
                    "src": "198302:151:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7681,
                            "name": "_isValidGovernor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7737,
                            "src": "198312:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "198312:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7683,
                        "nodeType": "ExpressionStatement",
                        "src": "198312:18:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 7688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 7684,
                              "name": "poolFactoryAdmins",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7513,
                              "src": "198340:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 7686,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 7685,
                              "name": "poolFactoryAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7675,
                              "src": "198358:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "198340:35:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 7687,
                            "name": "allowed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7677,
                            "src": "198378:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "198340:45:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7689,
                        "nodeType": "ExpressionStatement",
                        "src": "198340:45:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7691,
                              "name": "poolFactoryAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7675,
                              "src": "198420:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 7692,
                              "name": "allowed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7677,
                              "src": "198438:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 7690,
                            "name": "PoolFactoryAdminSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3705,
                            "src": "198400:19:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 7693,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "198400:46:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7694,
                        "nodeType": "EmitStatement",
                        "src": "198395:51:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "f3f616c0",
                  "id": 7696,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setPoolFactoryAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7679,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "198293:8:0"
                  },
                  "parameters": {
                    "id": 7678,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7675,
                        "mutability": "mutable",
                        "name": "poolFactoryAdmin",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7696,
                        "src": "198244:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 7674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "198244:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7677,
                        "mutability": "mutable",
                        "name": "allowed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 7696,
                        "src": "198270:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7676,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "198270:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "198243:40:0"
                  },
                  "returnParameters": {
                    "id": 7680,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "198302:0:0"
                  },
                  "scope": 7771,
                  "src": "198215:238:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3816
                  ],
                  "body": {
                    "id": 7708,
                    "nodeType": "Block",
                    "src": "198494:77:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7700,
                            "name": "_isValidGovernorOrPoolFactoryAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7757,
                            "src": "198504:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "198504:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7702,
                        "nodeType": "ExpressionStatement",
                        "src": "198504:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7703,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "198550:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_PoolFactory_$7771",
                                "typeString": "contract super PoolFactory"
                              }
                            },
                            "id": 7705,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_pause",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7462,
                            "src": "198550:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 7706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "198550:14:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7707,
                        "nodeType": "ExpressionStatement",
                        "src": "198550:14:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "8456cb59",
                  "id": 7709,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7698,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "198485:8:0"
                  },
                  "parameters": {
                    "id": 7697,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "198473:2:0"
                  },
                  "returnParameters": {
                    "id": 7699,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "198494:0:0"
                  },
                  "scope": 7771,
                  "src": "198459:112:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    3820
                  ],
                  "body": {
                    "id": 7721,
                    "nodeType": "Block",
                    "src": "198614:79:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 7713,
                            "name": "_isValidGovernorOrPoolFactoryAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7757,
                            "src": "198624:34:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 7714,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "198624:36:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7715,
                        "nodeType": "ExpressionStatement",
                        "src": "198624:36:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 7716,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "198670:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_super$_PoolFactory_$7771",
                                "typeString": "contract super PoolFactory"
                              }
                            },
                            "id": 7718,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_unpause",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7478,
                            "src": "198670:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 7719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "198670:16:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7720,
                        "nodeType": "ExpressionStatement",
                        "src": "198670:16:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "functionSelector": "3f4ba83a",
                  "id": 7722,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 7711,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "198605:8:0"
                  },
                  "parameters": {
                    "id": 7710,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "198593:2:0"
                  },
                  "returnParameters": {
                    "id": 7712,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "198614:0:0"
                  },
                  "scope": 7771,
                  "src": "198577:116:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 7736,
                    "nodeType": "Block",
                    "src": "198812:72:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 7732,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7727,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "198830:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 7728,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "198830:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7729,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7498,
                                    "src": "198844:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 7730,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "governor",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2485,
                                  "src": "198844:16:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                    "typeString": "function () view external returns (address)"
                                  }
                                },
                                "id": 7731,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "198844:18:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "198830:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "50463a4e4f545f474f56",
                              "id": 7733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "198864:12:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f21c5e756adccfaf094f41aec5bfae1614c1bbce378a45aec94ca2e313510deb",
                                "typeString": "literal_string \"PF:NOT_GOV\""
                              },
                              "value": "PF:NOT_GOV"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f21c5e756adccfaf094f41aec5bfae1614c1bbce378a45aec94ca2e313510deb",
                                "typeString": "literal_string \"PF:NOT_GOV\""
                              }
                            ],
                            "id": 7726,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "198822:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7734,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "198822:55:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7735,
                        "nodeType": "ExpressionStatement",
                        "src": "198822:55:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7723,
                    "nodeType": "StructuredDocumentation",
                    "src": "198699:66:0",
                    "text": "@dev Checks that `msg.sender` is the Governor."
                  },
                  "id": 7737,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidGovernor",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7724,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "198795:2:0"
                  },
                  "returnParameters": {
                    "id": 7725,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "198812:0:0"
                  },
                  "scope": 7771,
                  "src": "198770:114:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7756,
                    "nodeType": "Block",
                    "src": "199044:114:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 7752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 7747,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7742,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "199062:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "199062:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 7744,
                                      "name": "globals",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7498,
                                      "src": "199076:7:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                        "typeString": "contract IMapleGlobals"
                                      }
                                    },
                                    "id": 7745,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "governor",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2485,
                                    "src": "199076:16:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                      "typeString": "function () view external returns (address)"
                                    }
                                  },
                                  "id": 7746,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "199076:18:0",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "199062:32:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 7748,
                                  "name": "poolFactoryAdmins",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7513,
                                  "src": "199098:17:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                    "typeString": "mapping(address => bool)"
                                  }
                                },
                                "id": 7751,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7749,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "199116:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 7750,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "199116:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "199098:29:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "199062:65:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "50463a4e4f545f474f565f4f525f41444d494e",
                              "id": 7753,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "199129:21:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1861b96e6f81776ab477bc67008ed7b4f8c2208e319b3cbf72972b00d7b3a1f6",
                                "typeString": "literal_string \"PF:NOT_GOV_OR_ADMIN\""
                              },
                              "value": "PF:NOT_GOV_OR_ADMIN"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1861b96e6f81776ab477bc67008ed7b4f8c2208e319b3cbf72972b00d7b3a1f6",
                                "typeString": "literal_string \"PF:NOT_GOV_OR_ADMIN\""
                              }
                            ],
                            "id": 7741,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "199054:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "199054:97:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7755,
                        "nodeType": "ExpressionStatement",
                        "src": "199054:97:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7738,
                    "nodeType": "StructuredDocumentation",
                    "src": "198890:89:0",
                    "text": "@dev Checks that `msg.sender` is the Governor or a PoolFactory Admin."
                  },
                  "id": 7757,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isValidGovernorOrPoolFactoryAdmin",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7739,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "199027:2:0"
                  },
                  "returnParameters": {
                    "id": 7740,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "199044:0:0"
                  },
                  "scope": 7771,
                  "src": "198984:174:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7769,
                    "nodeType": "Block",
                    "src": "199292:70:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 7765,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "199310:25:0",
                              "subExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 7762,
                                    "name": "globals",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7498,
                                    "src": "199311:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IMapleGlobals_$2870",
                                      "typeString": "contract IMapleGlobals"
                                    }
                                  },
                                  "id": 7763,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "protocolPaused",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2569,
                                  "src": "199311:22:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                                    "typeString": "function () view external returns (bool)"
                                  }
                                },
                                "id": 7764,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "199311:24:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "50463a50524f544f5f504155534544",
                              "id": 7766,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "199337:17:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_cba75c6e138ed4fd949cf609a511760a457cf2b032c28a33c6c32cd975c5bf45",
                                "typeString": "literal_string \"PF:PROTO_PAUSED\""
                              },
                              "value": "PF:PROTO_PAUSED"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_cba75c6e138ed4fd949cf609a511760a457cf2b032c28a33c6c32cd975c5bf45",
                                "typeString": "literal_string \"PF:PROTO_PAUSED\""
                              }
                            ],
                            "id": 7761,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "199302:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "199302:53:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7768,
                        "nodeType": "ExpressionStatement",
                        "src": "199302:53:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7758,
                    "nodeType": "StructuredDocumentation",
                    "src": "199164:75:0",
                    "text": "@dev Checks that the protocol is not in a paused state."
                  },
                  "id": 7770,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_whenProtocolNotPaused",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 7759,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "199275:2:0"
                  },
                  "returnParameters": {
                    "id": 7760,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "199292:0:0"
                  },
                  "scope": 7771,
                  "src": "199244:118:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 7772,
              "src": "195876:3489:0"
            }
          ],
          "src": "115:199251:0"
        },
        "id": 0
      }
    }
  }
}
